1. 程式人生 > >【WPF學習】第二十五章 日期控制元件

【WPF學習】第二十五章 日期控制元件

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