如何更改DatePicker默认'级别'?

时间:2010-08-10 11:02:31

标签: silverlight silverlight-4.0 silverlight-toolkit

使用Silverlight DatePicker 时,默认情况下会在天视图中打开。当用户必须选择他的生日时,如果他可以首先选择年份并立即向下钻取而不首先上升树,那将是非常用户友好的。我可以猜测,大约70%的用户甚至都不知道如何使用日历标题来“向上”,所以如果我能避免这种情况,那就太可爱了。

默认情况下,有没有办法操纵datepicker打开的级别?

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

1 个答案:

答案 0 :(得分: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