Exemple #1
0
        private void UpdateMonth(int p)
        {
            MonthChangedEventArgs args = new MonthChangedEventArgs();

            args.OldDisplayStartDate = DisplayStartDate;
            DisplayStartDate         = DisplayStartDate.AddMonths(p);
            args.NewDisplayStartDate = DisplayStartDate;
            args.RoutedEvent         = DisplayMonthChangedEvent;
            RaiseEvent(args);
        }
        /// <summary>
        /// 更新月
        /// </summary>
        /// <param name="monthsToAdd">添加的月数</param>
        private void UpdateMonth(int monthsToAdd)
        {
            var ev = new MonthChangedEventArgs
            {
                OldDisplayStartDate = _displayStartDate
            };

            DisplayStartDate       = DisplayStartDate.AddMonths(monthsToAdd);
            ev.NewDisplayStartDate = DisplayStartDate;
            if (DisplayMonthChanged != null)
            {
                DisplayMonthChanged(ev);
            }
            BuildCalendarUI();
        }
Exemple #3
0
        void dayBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (e.Source is DayBoxControl)
            {
                //VisualTreeAdapter t = new VisualTreeAdapter(e.OriginalSource as DependencyObject);
                //DependencyObject  k = t.Parent;

                if (e.OriginalSource is TextBlock)
                {
                    TextBlock t = e.OriginalSource as TextBlock;
                    if (t.Name.Equals("DisplayText"))
                    {
                        return;
                    }
                }

                NewAppointmentEventArgs ev = new NewAppointmentEventArgs();
                DayBoxControl           d  = e.Source as DayBoxControl;
                ev.StartDate   = DisplayStartDate.AddDays(Double.Parse(d.Tag.ToString()) - 1).Date;
                ev.RoutedEvent = DayBoxDoubleClickedEvent;
                RaiseEvent(ev);
                e.Handled = true;
            }
        }
Exemple #4
0
        private void BuildCalendarUI()
        {
            int iDaysInMonth = DateTime.DaysInMonth(DisplayStartDate.Year, DisplayStartDate.Month);
            //int iOffsetDays = System.Enum.ToObject(System.DayOfWeek, DisplayStartDate.DayOfWeek);
            int iOffsetDays = (int)DisplayStartDate.DayOfWeek;
            int iWeekCount  = 0;
            WeekOfDaysControl weekRowCtrl = new WeekOfDaysControl();

            MonthViewGrid.Children.Clear();
            AddRowsToMonthGrid(iDaysInMonth, iOffsetDays);
            MonthYearLabel.Content = DisplayStartDate.ToString("MMMM") + " " + year;

            for (int i = 1; i <= iDaysInMonth; i++)
            {
                if ((i != 1) && System.Math.IEEERemainder((i + iOffsetDays - 1), 7) == 0)
                {
                    Grid.SetRow(weekRowCtrl, iWeekCount);
                    MonthViewGrid.Children.Add(weekRowCtrl);
                    weekRowCtrl = new WeekOfDaysControl();
                    iWeekCount++;
                }

                DayBoxControl dayBox = new DayBoxControl();
                dayBox.Name = "DayBox" + i;
                dayBox.DayNumberLabel.Text = i.ToString();
                dayBox.Tag = i;
                dayBox.MouseDoubleClick += new MouseButtonEventHandler(dayBox_MouseDoubleClick);
                //dayBox.PreviewDragEnter += new DragEventHandler(dayBox_PreviewDragEnter);
                //dayBox.PreviewDragLeave += new DragEventHandler(dayBox_PreviewDragLeave);

                //rest the namescope of the daybox in case user drags appointment from this day to another day, then back again
                //UnregisterName("DayBox" + i.ToString());
                //System.Windows.NameScope.SetNameScope(dayBox, new System.Windows.NameScope());
                //RegisterName("DayBox" + i.ToString(), dayBox);

                //-- resets the list of control-names registered with this monthview (to avoid duplicates later)
                //UnregisterName("DayBox" + i.ToString());
                //System.Windows.NameScope.SetNameScope(dayBox, new System.Windows.NameScope());
                //RegisterName("DayBox" + i.ToString(), dayBox);

                if (appointments != null)
                {
                    foreach (Appointment a in appointments)
                    {
                        if (a.ApDate.Day == i)
                        {
                            DayBoxAppointmentControl apt = new DayBoxAppointmentControl();
                            apt.Name              = "Apt" + a.Id;
                            apt.DataContext       = a;
                            apt.MouseDoubleClick += new MouseButtonEventHandler(appointment_MouseDoubleClick);
                            dayBox.DayAppointmentsStack.Children.Add(apt);
                            //dayBox.RegisterName(apt.Name, apt);
                        }
                    }
                }

                if (DateTime.Now.Day == i)
                {
                    dayBox.DayLabelRowBorder.Background    = Brushes.Aqua;
                    dayBox.DayAppointmentsStack.Background = Brushes.Wheat;
                }
                Grid.SetColumn(dayBox, (i - (iWeekCount * 7)) + iOffsetDays);
                weekRowCtrl.WeekRowGrid.Children.Add(dayBox);
            }
            Grid.SetRow(weekRowCtrl, iWeekCount);
            MonthViewGrid.Children.Add(weekRowCtrl);
        }
        /// <summary>
        /// 构造日历界面
        /// </summary>
        private void BuildCalendarUI()
        {
            //返回指定月份的总天数
            int daysInMonth = _cultureCalendar.GetDaysInMonth(_displayStartDate.Year, _displayStartDate.Month);

            //返回展示日期的星期数
            _startDayOffset = (int)Enum.ToObject(typeof(DayOfWeek), _displayStartDate.DayOfWeek);

            //总周数
            int weekCount   = 0;
            var weekRowCtrl = new WeekControl();

            GrdMonthView.Children.Clear();
            SetMonthGridRowDefinition(daysInMonth, _startDayOffset);
            LblMonth.Content = string.Format("{0}年{1}月", _displayYear, _displayMonth);

            for (int i = 1; i <= daysInMonth; i++)
            {
                //算出是星期几
                int week = (i + _startDayOffset - 1) % 7;
                //因为第一次已经有周控件了,所以i != 1
                if ((i != 1) && (0 == week))
                {
                    //开始新一周,将上周的控件加入
                    Grid.SetRow(weekRowCtrl, weekCount);
                    GrdMonthView.Children.Add(weekRowCtrl);
                    weekRowCtrl = new WeekControl();
                    weekCount  += 1;
                }

                //添加日控件
                var dayControl = new DayControl
                {
                    LblDayNumber = { Content = i.ToString(CultureInfo.InvariantCulture) },
                    Tag          = i
                };
                dayControl.MouseDoubleClick += DayControl_DoubleClick;

                //如果为当天,设置不同的样式
                if (new DateTime(_displayYear, _displayMonth, i) == DateTime.Today)
                {
                    dayControl.BdrDayLabel.Background       = (Brush)dayControl.TryFindResource("TodayBrush");
                    dayControl.SplDateTimeEvents.Background = Brushes.Wheat;
                }

                int iday = i;
                if (DateTimeEventControlFactory != null)
                {
                    var eventsInDay = from e in _dateTimeEvents
                                      where DayEqual(e.HappenTime, DisplayStartDate.AddDays(iday - 1))
                                      select e;
                    foreach (var e in eventsInDay)
                    {
                        var control = DateTimeEventControlFactory.GetControl(e);
                        if (control != null)
                        {
                            dayControl.SplDateTimeEvents.Children.Add(control.EventControl);
                        }
                    }
                }

                Grid.SetColumn(dayControl, (i - (weekCount * 7)) + _startDayOffset);
                weekRowCtrl.GrdWeek.Children.Add(dayControl);
            }

            //加入最后一周
            Grid.SetRow(weekRowCtrl, weekCount);
            GrdMonthView.Children.Add(weekRowCtrl);
        }