Ограничение C # DatePicker

#c# #wpf #c#-4.0 #datepicker

#c# #wpf #c #-4.0 #выбор даты

Вопрос:

Мне нужно предоставить моим пользователям возможность выбирать любую действительную субботу в приложении WPF. Прямо сейчас я просто использую DatePicker и ошибку, если день недели не суббота.

 DateTime selectedDate = Convert.ToDateTime(datePicker1.ToString());
if (selectedDate.DayOfWeek != DayOfWeek.Saturday)
{
    MessageBox.Show("Please pick a Saturday");
}
  

Я бы предпочел сделать это в элементе управления и просто вернуться к следующей субботе или сделать Sun-Fri недоступным. Это должно быть легко, но я рисую пробел.

Ответ №1:

Я думаю, вы хотите взглянуть на BlackoutDates свойство. Вы можете подписаться на DisplayDateChanged событие, чтобы отслеживать, когда пользователь переключает месяцы, и повторно инициализировать список BlackoutDates для этого нового месяца.

Комментарии:

1. Я не уверен, что смогу перехватить событие, когда пользователь переходит вперед или назад на месяц. Без этого вам не пришлось бы отключать все возможные даты во время инициализации?

2. Используйте DisplayDateChanged событие для базового объекта календаря.

3. DisplayDateChanged предназначен для элемента управления календарем, но, похоже, я не могу получить дескриптор (или событие) для всплывающего календаря, который создает DatePicker. Displayadatechanged определенно не работает.

4. Я не вижу никаких других решений. Я не знаю, как работает Calendar / DatePicker, но из примеров кода, которые я видел, у них есть отдельные идентификаторы, поэтому кажется, что вы должны иметь возможность получить дескриптор для них обоих.

Ответ №2:

В зависимости от того, насколько понятным вы должны быть для пользователя, вы можете использовать тонкую цветовую подсветку элемента управления (forecolor, backcolor), чтобы указать на ошибку. Затем используйте окно сообщения, если они попытаются проигнорировать предупреждение.