示例#1
0
        /// <summary>
        /// Draws the week day names.
        /// </summary>
        private void DrawWeekDays(ref float topOffset)
        {
            // calc the rect of the week day names row
            SizeF      weekDaysRowSize = CalendarData.GetDaysOfWeekRowSize(MonthAreaSize);
            RectangleF weekDaysRowRect = new RectangleF(
                CalendarArea.X, CalendarArea.Y + topOffset,
                weekDaysRowSize.Width, weekDaysRowSize.Height);

            SizeF dayCellSize = CalendarData.GetDayCellSize(weekDaysRowSize);

            using (BrushEx brush = Canvas.CreateSolidBrush(CalendarData.DayHeadersBackcolor))
                Canvas.FillRectangle(brush, weekDaysRowRect);

            // draw the week days how they represented in month
            var font = CalendarData.DayHeadersFontStyle.CreateFontInfo();

            using (BrushEx brush = Canvas.CreateSolidBrush(CalendarData.DayHeadersFontStyle.FontColor))
                using (PenEx pen = LineStyle.CreatePen(Canvas, CalendarData.DayHeadersBorderStyle))
                {
                    for (int i = 0; i < CalendarData.DaysInWeek; i++)
                    {
                        RectangleF dayCellRect;
                        if (!_rightToLeft)
                        {
                            dayCellRect = new RectangleF(
                                weekDaysRowRect.X + (i * dayCellSize.Width),
                                weekDaysRowRect.Y,
                                dayCellSize.Width,
                                dayCellSize.Height);
                        }
                        else
                        {
                            dayCellRect = new RectangleF(
                                (weekDaysRowRect.X + weekDaysRowRect.Width) - ((i + 1) * dayCellSize.Width),
                                weekDaysRowRect.Y,
                                dayCellSize.Width,
                                dayCellSize.Height);
                        }
                        var borderPath = new PathEx();
                        {
                            // create day-box area
                            borderPath.AddLines(
                                new PointF[]
                            {
                                new PointF(dayCellRect.X, dayCellRect.Y),
                                new PointF(dayCellRect.X + dayCellRect.Width, dayCellRect.Y),
                                new PointF(dayCellRect.X + dayCellRect.Width, dayCellRect.Y + dayCellRect.Height),
                                new PointF(dayCellRect.X, dayCellRect.Y + dayCellRect.Height),
                            });
                            borderPath.CloseAllFigures();

                            // the day name to draw
                            string weekDayName = CalendarData.Culture.DateTimeFormat.GetDayName(CalendarData.WeekDays[i]);
                            // HACK: we should consider the issue with drawing string later. the issue comes about in the designer when caledar has small width to fit titles. --SergeyP
                            {
                                Canvas.PushState();
                                Canvas.DrawString(weekDayName, font, brush, dayCellRect, ToEx(CalendarData.DayHeadersFormat));
                                Canvas.PopState();
                            }
                            Canvas.DrawAndFillPath(pen, null, borderPath);
                            //RenderUtils.DrawRectangle(Canvas, pen, dayCellRect.X, dayCellRect.Y, dayCellRect.Width, dayCellRect.Height);
                        }
                    }
                }

            // set offset
            topOffset += weekDaysRowSize.Height;
        }