WPF C#日期选择器单击打开日历
我正在向表单中添加一个WPFWPF C#日期选择器单击打开日历,c#,wpf,datepicker,wpf-controls,C#,Wpf,Datepicker,Wpf Controls,我正在向表单中添加一个WPFDatePicker控件,它运行良好。但我不希望用户能够在“选择日期”文本框中键入类型。我希望它是只读的,当他们点击文本框时,它只会打开日历 我不确定酒店里是否有这样的选择?我找不到任何东西… <DatePicker HorizontalAlignment="Left" VerticalAlignment="Top"> <DatePicker.Resources> <Style TargetType="DatePi
DatePicker
控件,它运行良好。但我不希望用户能够在“选择日期”文本框中键入类型。我希望它是只读的,当他们点击文本框时,它只会打开日历
我不确定酒店里是否有这样的选择?我找不到任何东西…
<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 visualizer查看顶级控件使用的子控件(在本例中为DatePickerTextBox),然后在参考资料部分对该类型应用样式和/或模板,就像我在这里所做的那样。Mark Feldman的回答部分正确,他没有回答如何点击文本框打开日历弹出窗口 您应该钩住
日期选取器的模板
,并放大按钮的大小,使其与文本框重叠:然后您就完成了,当您单击文本框时,它就是获取事件的按钮,请参见下面修改后的日期选取器模板的一部分:
<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回答中描述的日期选择器文本框
的样式您可以通过以下方式打开日历:
<DatePicker Name="datePicker" Focusable="False">
<DatePicker.Resources>
<Style TargetType="DatePickerTextBox">
<EventSetter Event="MouseLeftButtonUp" Handler="OnMouseLeftButtonUp" />
</Style>
</DatePicker.Resources>
</DatePicker>
非常感谢您的解决方案!如果遇到类似问题,我将使用WPF可视化工具。谢谢。我一直在努力解决这个问题,很好的解决方案。
private void OnMouseLeftButtonUp(object sender, RoutedEventArgs e)
{
datePicker.IsDropDownOpen = true;
}