DatePicker с календарем десятилетия, чтобы выбрать только год - PullRequest
0 голосов
/ 30 октября 2019

Есть ли способ заставить Календарь DatePicker использовать только Decade DisplayMode, и когда год нажимается на Календарь, введите значение года в текстовое поле DatePicker?

Это то, что у меня есть:

XAML:

   <DatePicker x:Name="Dtp_Date" HorizontalAlignment="Left" Margin="117,221,0,0" VerticalAlignment="Top" CalendarOpened="Dtp_Datum_CalendarOpened">
            <DatePicker.Resources>
                <Style TargetType="DatePickerTextBox">
                    <Setter Property="Text" Value="Choose year..."/>
                </Style>
            </DatePicker.Resources>
        </DatePicker>

Код:

private void Dtp_Date_CalendarOpened(object sender, RoutedEventArgs e)
    {
        //Change drop-down of Calendar to Decade
        DatePicker datepicker = (DatePicker)sender;
        Popup popup = (Popup)datepicker.Template.FindName("PART_Popup", datepicker);
        if (popup != null)
        {
            Calendar cal = (Calendar)popup.Child;
            if (cal != null) cal.DisplayMode = CalendarMode.Decade;
        }
    }

Это успешно открывает календарь DatePicker с DisplayMode= CalendarMode.Decade. Но как только я нажимаю на Календарь, он меняет DisplayMode на Месяц (и на Дни другим щелчком).

Вместо этого я хотел бы, чтобы Календарь был закрыт, и введите значение года в текстовое поле DatePicker's, больше ничего. Это возможно?

1 Ответ

0 голосов
/ 30 октября 2019

Вы можете эмулировать то, что вы хотите сделать, с помощью редактируемого ComboBox.

ComboBox является редактируемым, что означает, что пользователь может просто ввести год и вы можете проверить его, или они могут открытьраскрывающийся список и увидите список, аналогичный тому, как годы отображаются в элементе управления DatePicker.

Этот образец просто привязан к списку лет.

<ComboBox
    Width="100"
    Height="20"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    IsEditable="True"
    ItemsSource="{Binding Years}"
    MaxDropDownHeight="168">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel
                MaxWidth="200"
                Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Grid
                Width="40"
                Height="42">
                <TextBlock
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    Text="{Binding}" />
            </Grid>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...