2010-08-10 128 views
2

使用Silverlight DatePicker时,默认情况下会在天视图中打开。当用户不得不选择他的生日时,如果他能够首先选择年份并且立即钻取而不是首先上树,那将是很多用户友好的。我可以猜测,大约70%的用户甚至都不知道如何使用日历标题去'上',所以如果我能够避免这种情况,这将是可爱的。如何更改DatePicker默认的“级别”?

有没有办法来操作datepicker默认打开的级别?

在Silverlight中是否有更多用户友好的控件来选择生日?

回答

2

在它的面前,你应该能够做这样的事情: -

 <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

+0

好答案!非常感谢AnthonyWJones – 2010-08-11 05:57:07