Calendar и DatePicker
36WPF --- Элементы управления WPF --- Calendar и DatePicker
В WPF появились два элемента управления датами: Calendar и DatePicker. Оба они позволяют выбрать дату, т.е. день календаря. Элемент Calendar выводит календарь, похожий на тот, который использует операционная система Windows (например, при настройке системной даты). На нем показан лишь один месяц с возможностью переходить к соседнему месяцу (с помощью кнопочек со стрелками) или к конкретному месяцу (с помощью заголовка, который позволяет увидеть сразу целый год и выбрать нужный месяц).
Элемент DatePicker занимает меньше места. Он имеет вид простого текстового поля, которое содержит строку с датой в длинном или коротком формате. Справа у него есть кнопочка со стрелкой, при щелчке на которой раскрывается полное представление календаря, идентичное элементу Calendar. Этот календарь выводится поверх другого содержимого, как и раскрывающийся список ComboBox.
На рисунке показаны две модели отображения, которые поддерживает элемент Calendar, а также элемент DatePicker:
Свойства классов Calendar и DatePicker позволяют определить даты, которые отображаются, и даты, которые можно выбирать (если они находятся в непрерывном диапазоне). Доступные свойства этих классов приведены ниже:
- DisplayDateStart и DisplayDateEnd
Устанавливают диапазон дат, которые выводятся в календаре — от самой ранней даты (DisplayDateStart) до самой поздней (DisplayDateEnd). Пользователь не может перейти к месяцам, в которых нет ни одной отображаемой даты. Чтобы разрешить все даты, можно занести в свойство DisplayDateStart значение DateTime.MinValue, а в свойство DisplayDateEnd — значение DateTime.MaxValue.
- BlackoutDates
Содержит коллекцию дат, которые будут в календаре неактивными, т.е. их невозможно выбрать. Если эти даты не входят в диапазон отображаемых дат, или одна из этих дат уже выбрана, возникает исключение. Чтобы запретить выбор любой прошедшей даты, вызовите метод BlackoutDates.AddDatesInPast().
- SelectedDate
Предоставляет выбранную дату в виде объекта DateTime (или пустое значение, если не выбран ни один день). Его можно задать программно, щелчком на одном из дней в календаре или вводом строки в поле даты (элемента DatePicker). В представлении календаря выбранная дата отмечается затененным квадратиком, который виден лишь тогда, когда данный элемент имеет фокус ввода
- SelectedDates
Содержит выбранные даты в виде коллекции объектов DateTime. Это свойство поддерживается классом Calendar и имеет смысл только тогда, когда установлено свойство SelectionMode, позволяющее выбрать несколько дат
- DisplayDate
Определяет дату, которая выводится при первоначальном отображении календаря (с помощью объекта DateTime). Если она пуста, то выводится значение SelectedDate. Если пусты оба значения DisplayDate и SelectedDate, то используется текущая дата. Отображаемая дата определяет первоначально выводимый месяц в отображении календаря. Когда элемент имеет фокус, указанный день этого месяца выделяется квадратной рамочкой (которая отличается от затененного квадратика, применяемого для выбранной в данный момент даты).
- FirstDayOfWeek
Определяет день недели, который выводится в начале (слева) каждой строки календаря
- IsTodayHighlighted
Определяет, должна ли быть выделена в календаре текущая дата
- DisplayMode (только Calendar)
Задает первоначальный вид календаря. Если равно Month, то в календаре выводится один месяц. Если равно Year, то выводится список месяцев в текущем году (как будто пользователь щелкнул на заголовке месяца). После щелчка на конкретном месяце появится полное представление этого месяца.
- SelectionMode (только Calendar)
Определяет вид разрешенного выбора даты. По умолчанию равно SingleDate, что означает разрешение выбора только одной даты. Другие варианты — None (выбор полностью запрещен), SingleRange (можно выбрать последовательный диапазон дат) и MultipleRange (допустимо любое сочетание дат). В режимах SingleRange и MultipleRange пользователь может выбрать несколько дат с помощью мыши (наподобие перетаскивания) или щелкая на датах с прижатой клавишей <Ctrl>. Коллекцию всех выбранных дат можно получить с помощью свойства SelectedDates.
- IsDropDownOpen (только DatePicker)
Определяет, должен ли быть открыт раскрывающийся список в элементе DatePicker. Это свойство можно задавать программно, чтобы показать или скрыть календарь
- SelectedDateFormat (только DatePicker)
Определяет отображение выбранной даты в текстовой части элемента DatePicker. Допустимые варианты — Short (краткий формат) или Long (длинный формат). Конкретный формат отображения даты зависит от региональных настроек клиентского компьютера. Например, при значении Short дата может быть выведена в формате ГГГГ/ММ/ДД или ДД/ММ/ГГГГ. Длинный формат обычно содержит названия месяца и дня.
Элементы управления датами также предоставляют несколько различных событий. Наиболее полезно из них событие SelectedDateChanged в классе DatePicker или аналогичное событие SelectedDatesChanged в классе Calendar, которые позволяют поддерживать выбор нескольких дат. Реагируя на эти события, можно отменить выбор отдельных дат (например, дат, выпадающих на выходные).