Как создать DatePicker с включенными только воскресеньями? - PullRequest
4 голосов
/ 28 сентября 2011

Мне нужно разрешить пользователю выбирать только воскресенье из моего выбора даты, поэтому мне нужно отключить другие столбцы. Но я не мог найти никакого решения для этого. В настоящее время я просто регистрируюсь в событии с измененным выбором и очищаю дату, если она недействительна. Как полностью отключить не воскресенье?

Ответы [ 2 ]

9 голосов
/ 28 сентября 2011

Соответствующий раздел в @ предложенной Каляном ссылке относится к затемненным датам и свойству DatePicker BlackoutDates, которое позволяет вам указывать диапазоны дат, которые пользователиНевозможно выбрать.

Это свойство имеет тип CalendarBlackoutDatesCollection, который является подклассом ObservableCollection<CalendarDateRange>.Зная это, вы можете программно добавлять диапазоны, включающие с понедельника по субботу, в эту коллекцию для всех недель, которые будут отображаться в вашем календаре.

Важное замечание, которое следует отметить, описано на странице MSDN для свойства BlackoutDates:

Добавление даты в эту коллекцию, когда она уже выбрана, или добавление даты вне диапазона, указанного в DisplayDateStart и DisplayDateEnd, приведет к возникновению ArgumentOutOfRangeException.

Поэтому убедитесь, чтоВы знаете, как определяются эти два свойства.

Простой пример:

//Code assumes a DateTimePicker declared in XAML with its Name property set to "calendar"
var minDate = calendar.DisplayDateStart ?? DateTime.MinValue;
var maxDate = calendar.DisplayDateEnd ?? DateTime.MaxValue;

//pardon the somewhat clunky DateTime.MaxValue handling here; it prevents an overflow
//when actually adding dates near the maximum
for (var d = minDate; d <= maxDate && (DateTime.MaxValue - d.AddDays(7)).Days > 7; d = d.AddDays(7))
{
    var range = new CalendarDateRange(d, d.AddDays(5));
    calendar.BlackoutDates.Add(range);
}

Обратите внимание: по умолчанию, свойства DateTimePicker's DisplayDateStart / End имеют значение null.Таким образом, приведенный выше код затемняет ВСЕ дни, кроме воскресенья, с 1 января 0001 года по 31 декабря 9999 года. Это приводит к крайне плохой производительности, когда элемент управления Calendar отображается и взаимодействует с ним.Поэтому, если вы собираетесь использовать эту технику, я настоятельно рекомендую ограничить начальную и конечную даты сборщика (и, следовательно, количество диапазонов затемнения) разумными пределами.

0 голосов
/ 28 сентября 2011

Вы упомянули прохождение Calendar & DatePicker

...