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(); }
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; } }
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); }