在它的面前,你应该能够做这样的事情: -
<sdk:DatePicker Name="datePicker1" >
<sdk:DatePicker.CalendarStyle>
<Style TargetType="sdk:Calendar">
<Setter Property="DisplayMode" Value="Decade" />
</Style>
</sdk:DatePicker.CalendarStyle>
</sdk:DatePicker>
对于几乎在下拉列表中显示日历的所有其他功能这会工作。但是,无论何时打开下拉列表,DataPicker内部的代码都会将DisplayMode
设置为Month
。因此,我们需要求助于一个丑陋的黑客攻击: -
private void datePicker1_CalendarOpened(object sender, RoutedEventArgs e)
{
DatePicker picker = (DatePicker)sender;
if (!picker.SelectedDate.HasValue)
{
var popup = picker.Descendents().OfType<Popup>().FirstOrDefault();
if (popup != null)
{
var item = popup.Child.Descendents().OfType<Calendar>().FirstOrDefault();
if (item != null)
item.DisplayMode = CalendarMode.Decade;
}
}
}
对我实施Descendents
扩展方法请参见本answer。
好答案!非常感谢AnthonyWJones – 2010-08-11 05:57:07