WPF包含兩個日期控件:Calender和DatePicker。這兩個控件都被設計為允許用戶選擇日期。
Calendar控件顯示日期,在與Windows操作系統中看到的日歷(例如,當配置系統日期時看到的日歷)相似。該控件每次顯示一個月份,允許從一個月份跳到另一個月份(通過單擊箭頭按鈕),或跳到某個特定的月份(通過單擊月份的標題頭查看一年中的月份,然后單擊月份)。
DatePicker控件需要的空間更少。它模范簡單的文本框,該文本框以長日期格式或短日期格式保存日期字符串。DatePicker控件提供了一個下拉箭頭,當單擊時,會彈出完整的日歷試圖,該試圖和Calendar控件顯示的試圖仙童。這個彈出試圖顯示在其他任何內容的上面,就像是下拉組合框。
下圖顯示了Calendar控件支持的兩種顯示模式,以及DatePicker支持的兩種日期格式。
Calendar和DatePicker控件提供的屬性允許你確定顯示哪些日期以及哪些日期時可供選擇的(以連續的范圍提供這些日期)。下表列出了可供使用的屬性:
表 Calendar和DatePicker類的屬性
日期控件還提供了幾個不同事件。最有用的事件是DatePicker控件中的SelectedDateChanged事件,或Calendar控件中類似的SelectedDatesChanged事件,該事件添加了對多個日期選擇的支持。可響應這些事件以拒絕特定的日期選擇,例如周末的日期:
private void Calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e) { foreach (DateTime selectedDate in e.AddedItems) { if ((selectedDate.DayOfWeek == DayOfWeek.Saturday) || (selectedDate.DayOfWeek == DayOfWeek.Sunday)) { lblError.Text = "Weekends are not allowed"; ((Calendar)sender).SelectedDates.Remove(selectedDate); } } }
可使用支持單個或多個日期選擇的Calendar事件加以測試。如果支持多個選擇,那么嘗試在整個星期的日期上拖動鼠標。除不允許的周末日期外,其他所有日期將保持突出顯示,而周末日期將被自動取消選擇。
Calendar控件還添加了DisplayDateChanged事件(當用戶瀏覽到新的月份時觸發該事件)。DatePicker控件添加了CalendarOpened和CalendarClosed事件(當下拉日歷顯示和關閉時觸發這兩個事件),以及DateValidationError事件(當用戶在文本輸入部分輸入不能被解釋為合法時間的值時觸發該事件)。通常,但用戶打開日歷試圖時會丟棄非法值,但可以選擇填充一些文本以通知發生了問題:
private void DatePicker_DateValidationError(object sender, DatePickerDateValidationErrorEventArgs e) { lblError.Text = "'" + e.Text + "' is not a valid value because " + e.Exception.Message; }