【问题标题】:How to change DatePicker default 'level'?如何更改 DatePicker 默认的“级别”?
【发布时间】:2010-08-10 11:02:31
【问题描述】:

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

有没有办法控制日期选择器默认打开的级别?

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

【问题讨论】:

    标签: silverlight silverlight-4.0 silverlight-toolkit


    【解决方案1】:

    从表面上看,你应该可以做这样的事情:-

            <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;
            }
        }
    }
    

    请参阅此answer,了解我对Descendents 扩展方法的实现。

    【讨论】:

    • 很好的答案!非常感谢 AnthonyWJones
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多