【发布时间】:2019-10-30 14:02:32
【问题描述】:
有没有办法强制 DatePicker 的 Calendar 只使用 Decade DisplayMode,当点击 Calendar 时,在 DatePicker 的 Textbox 中输入 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;
}
}
这成功打开了 DatePicker 的日历,DisplayMode = CalendarMode.Decade。但是,一旦我单击日历,它就会将 DisplayMode 更改为 Month(再单击一次更改为 Days)。
我想要关闭日历并在 DatePicker 的文本框中输入年份值,而不是其他。这可能吗?
【问题讨论】:
-
thread 对您有帮助吗?
-
@Pavel Anikhouski,正如我在这个线程中看到的答案,对显示日历做同样的事情。但它不涉及单击/关闭日历和更新日期选择器的选定年份值的部分。我没有看到任何日历点击事件,这就是我问的原因。
-
您是否考虑过使用可编辑的 ComboBox 代替?如果目标只是简单地选择一年,那么(对您和您的用户)这样做似乎更有意义。
-
@Keithernet,“可编辑”是什么意思?...我的问题是用户可以选择任何年份,所以我不能只为所有可能的年份添加组合框...但是如果我问的是不可能的,然后我将添加 Texbox - 用户将输入年份,后面的代码将检查如果文本真的是一年(日期)......但这不是用户想要的......
-
年份代表什么?约会出生?历史上的一个点?您通常不会遇到年份范围不受限制的情况。无论如何,我认为您可以模仿一些行为并以非常好的方式显示您想要的。请参阅下面的答案。
标签: c# wpf datepicker