Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF C#日期选择器单击打开日历_C#_Wpf_Datepicker_Wpf Controls - Fatal编程技术网

WPF C#日期选择器单击打开日历

WPF C#日期选择器单击打开日历,c#,wpf,datepicker,wpf-controls,C#,Wpf,Datepicker,Wpf Controls,我正在向表单中添加一个WPFDatePicker控件,它运行良好。但我不希望用户能够在“选择日期”文本框中键入类型。我希望它是只读的,当他们点击文本框时,它只会打开日历 我不确定酒店里是否有这样的选择?我找不到任何东西… <DatePicker HorizontalAlignment="Left" VerticalAlignment="Top"> <DatePicker.Resources> <Style TargetType="DatePi

我正在向表单中添加一个WPF
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;
}