Как изменить «Уровень» DatePicker по умолчанию? - PullRequest
2 голосов
/ 10 августа 2010

При использовании Silverlight DatePicker он открывается по умолчанию в днях. Когда пользователь должен выбрать свой день рождения, было бы очень удобно, если бы он мог сначала выбрать год и развернуть сразу, не поднимаясь вверх по дереву. Я могу предположить, что около 70% наших пользователей даже не поймут, как использовать заголовки календаря, чтобы подняться, поэтому, если бы я мог избежать этого, это было бы прекрасно.

Есть ли способ манипулировать уровнем, на котором по умолчанию открывается средство выбора даты?

Есть ли в Silverlight более удобный элемент управления для выбора дня рождения?

1 Ответ

2 голосов
/ 10 августа 2010

На первый взгляд, вы должны сделать что-то вроде этого: -

        <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.

...