Соответствующий раздел в @ предложенной Каляном ссылке относится к затемненным датам и свойству 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 отображается и взаимодействует с ним.Поэтому, если вы собираетесь использовать эту технику, я настоятельно рекомендую ограничить начальную и конечную даты сборщика (и, следовательно, количество диапазонов затемнения) разумными пределами.