WPF C# DatePicker 单击时打开日历
Posted
技术标签:
【中文标题】WPF C# DatePicker 单击时打开日历【英文标题】:WPF C# DatePicker open calendar on click 【发布时间】:2013-12-17 13:24:42 【问题描述】:我正在向我的表单添加一个 WPF DatePicker
控件,它工作正常。但我不希望用户能够在“选择日期”文本框中输入类型。我希望它是只读的,当他们单击文本框时,它只会打开日历。
我不确定属性中是否有此选项?我找不到任何东西...
【问题讨论】:
【参考方案1】:<DatePicker HorizontalAlignment="Left" VerticalAlignment="Top">
<DatePicker.Resources>
<Style TargetType="DatePickerTextBox">
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="Text" Value=" "/>
<Setter Property="Focusable" Value="False"/>
<Setter Property="IsEnabled" Value="False" />
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
</DatePicker.Resources>
</DatePicker>
以后您可以使用 WPF 可视化工具查看***控件正在使用哪个子控件(在本例中为 DatePickerTextBox),然后像我所做的那样在资源部分中将样式和/或模板应用于该类型在这里。
【讨论】:
非常感谢您的解决方案!如果遇到类似问题,我将使用 WPF 可视化工具。【参考方案2】:Mark Feldman 的回答部分正确,他没有回答点击文本框如何打开日历弹出窗口!
您应该钩住DatePicker
的模板并放大按钮的大小,使其与文本框重叠:然后您就完成了,当您单击文本框时,它是获取事件的按钮,请参见下面的一部分DatePicker
的修改模板:
<DatePickerTextBox Grid.Row="0" Grid.Column="0" x:Name="PART_TextBox" Focusable="TemplateBinding Focusable" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/>
<Button Grid.Row="0" Grid.Column="0" x:Name="PART_Button" Foreground="TemplateBinding Foreground" Focusable="False" >
<Button.Template>
<ControlTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Background="Transparent"/>
<Button Grid.Column="1" HorizontalAlignment="Left" Foreground="TemplateBinding Foreground" Template="StaticResource DropDownButtonTemplate" VerticalAlignment="Top" Width="20" Margin="3,0,3,0" />
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
不要忘记添加 Mark Feldman 的答案中描述的DatePickerTextBox
的样式
【讨论】:
感谢您。我一直在努力解决这个问题,很好的解决方案。【参考方案3】:你可以这样打开日历:
<DatePicker Name="datePicker" Focusable="False">
<DatePicker.Resources>
<Style TargetType="DatePickerTextBox">
<EventSetter Event="MouseLeftButtonUp" Handler="OnMouseLeftButtonUp" />
</Style>
</DatePicker.Resources>
</DatePicker>
private void OnMouseLeftButtonUp(object sender, RoutedEventArgs e)
datePicker.IsDropDownOpen = true;
【讨论】:
以上是关于WPF C# DatePicker 单击时打开日历的主要内容,如果未能解决你的问题,请参考以下文章
DatePicker 数据绑定将默认值设置为 1/1/0001 WPF c#
jQuery TOOLS datepicker - 单击按钮后打开日历