Элемент управления DatePicker устанавливает CalendarMode в явное значение месяц, когда открывается всплывающее окно, которое переопределяет значение из вашего стиля.От Reflector:
private void PopUp_Opened(object sender, EventArgs e)
{
if (!this.IsDropDownOpen)
{
this.IsDropDownOpen = true;
}
if (this._calendar != null)
{
this._calendar.DisplayMode = CalendarMode.Month;
this._calendar.MoveFocus(
new TraversalRequest(FocusNavigationDirection.First));
}
this.OnCalendarOpened(new RoutedEventArgs());
}
Я не думаю, что вы сможете переопределить это в XAML, потому что он устанавливает значение явно.Вы можете добавить обработчик CalendarOpened="DatePicker_CalendarOpened"
и установить его обратно в Decade в коде, выполнив что-то вроде этого:
private void DatePicker_CalendarOpened(object sender, RoutedEventArgs e)
{
var datepicker = sender as DatePicker;
if (datepicker != null)
{
var popup = datepicker.Template.FindName(
"PART_Popup", datepicker) as Popup;
if (popup != null && popup.Child is Calendar)
{
((Calendar)popup.Child).DisplayMode = CalendarMode.Decade;
}
}
}
(я пробовал это с WPF Toolkit DatePicker в 3.5, поэтому я необещаю, что это работает в 4.0.)