摘要

日历控件用于创建可视日历,让用户选择日期并在选择日期时触发事件。Calendar 控件在 System.Windows.Controls 命名空间中定义。


正文

**显示模式 **

Calendar类的DisplayMode属性表示Calendar的显示格式,可以是月、年或年。默认模式为“月”。将DisplayMode设置为Year和Decade。

DisplayDateStart 指定日期视图起始显示范围

DisplayDateEnd 指定日期视图结尾显示范围

FirstDayOfWeek 指定某一天作为一个星期的第一天

SelectionMode 允许控件是否可以多选日期

CalendarSelectionMode



None

不允许选择。

SingleDate

通过设置 SelectedDate 或 SelectedDates 中的第一个值,只能选择一个日期。不能使用 AddRange。

SingleRange

可以选择单个日期范围。设置 SelectedDate、将日期单独添加到 SelectedDates 或使用 AddRange 将清除 SelectedDates 中的所有先前值。

MultipleRange

可以选择多个不连续的日期范围。将日期单独添加到 SelectedDates 或使用 AddRange 不会清除 SelectedDates。设置 SelectedDate 仍将清除 SelectedDates,但可以添加其他日期或范围。添加包含一些已选择日期或与另一个范围重叠的日期的范围会导致这些范围的并集,并且不会导致异常。

int idx = 0; private void Button_Click(object sender, RoutedEventArgs e) { cad1.DisplayMode = (CalendarMode)(idx % 3); idx++; } private void cad1_SelectedDatesChanged(object sender, SelectionChangedEventArgs e) { txtInfo.Text = ""; for (int i = 0; i < cad1.SelectedDates.Count; i++) { txtInfo.Text += cad1.SelectedDates[i].ToString("yyyy-MM-dd")+System.Environment.NewLine; } }

BlackoutDates

Calendar类的BlackoutDates属性表示不可用于选择的日期集合。所有非选择日期都用叉号标记。

private void LoadDate() { var curMonth = cal.DisplayDate; var minDate = curMonth.AddDays(1 - curMonth.Day).Date; var maxDate = curMonth.AddDays(1 - curMonth.Day).Date.AddMonths(1).AddSeconds(-1); for (DateTime i = minDate; i < maxDate; i=i.AddDays(1)) { lstDate.Items.Add(i); } } private void Window_Loaded(object sender, RoutedEventArgs e) { LoadDate(); } private void btnDisable_Click(object sender, RoutedEventArgs e) { cal.BlackoutDates.Add(new CalendarDateRange((DateTime)lstDate.SelectedItem)); }

DatePicker基本功能与Calendar一样的,只有一点不同,DatePicker可以手动输入

public Window2() { InitializeComponent(); dtp.BlackoutDates.Add(new CalendarDateRange(DateTime.Parse("2022-06-18"), DateTime.Parse("2022-06-20"))); } private void dtp_SelectedDateChanged(object sender, SelectionChangedEventArgs e) { txt.Text = dtp.Text; }