是否有一种方法可以强制DatePicker的日历仅使用Decade DisplayMode,并且当单击Calendar上的year时,在DatePicker的文本框中输入year的值?
这是我到目前为止所拥有的:
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;
}
}
这将成功打开显示模式为CalendarMode.Decade的DatePicker的日历。但是,一旦我单击Calendar,它将DisplayMode更改为Month(更改为Days,再单击一次则更改为Days)。
相反,我希望关闭Calendar并在DatePicker的“文本框”中输入年份值。这可能吗?
答案 0 :(得分:0)
您可以使用可编辑的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>