WPF DatePicker 自定义格式

Posted

技术标签:

【中文标题】WPF DatePicker 自定义格式【英文标题】:WPF DatePicker Custom Format 【发布时间】:2022-01-18 03:58:14 【问题描述】:

如前所述,我希望将日期选择器日期自定义为 YYYY-MM-DD 我的 XAML 文件中有:

<DatePicker x:Name="DatePicker_Date"  Width="300px" VerticalAlignment="Center" HorizontalAlignment="Center" >
                    <DatePicker.Resources>
                        <Style TargetType="x:Type DatePickerTextBox">
                            <Setter Property="Control.Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <TextBox x:Name="PART_TextBox"
                                 Text="Binding Path=SelectedDate, 
                                        RelativeSource=RelativeSource AncestorType=x:Type DatePicker, 
                                        StringFormat=x:Static local:App.DateFormat" />
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DatePicker.Resources>
                </DatePicker>

然后在我的 App.xaml.cs 文件中:

 public partial class App : Application

    public static string DateFormat = "yyyy-MM-dd";

所以这可以在选择器本身中以正确的方式显示日期,但是当我去引用那个日期时:

string dateTemp = DatePicker_Date.Text;

它只是打印出原始日期格式 MM-DD-YYYY

我在这里缺少什么——我不能使用不起作用的 PART_Textbox.text。如何将新格式化的文本转换为字符串?

我在堆栈溢出方面遵循了其中一些解决方案,但它们似乎具有相同的结果,我最喜欢的一个设置在 app.xaml 资源中,因此我不必每次都为我的每个日期选择器都这样做申请,但我有同样的问题:

 <Style TargetType="x:Type DatePickerTextBox">
 <Setter Property="VerticalContentAlignment" Value="Center"/>
 <Setter Property="Control.Template">
     <Setter.Value>
         <ControlTemplate>
             <TextBox x:Name="PART_TextBox"
        Text="Binding Path=SelectedDate, StringFormat='dd.MM.yyyy', 
        RelativeSource=RelativeSource AncestorType=x:Type DatePicker" />
         </ControlTemplate>
     </Setter.Value>
 </Setter>

对 WPF 比较陌生,为我的无知道歉。

【问题讨论】:

参见Remarks:"虽然 Text 属性可以设置为 Parse 方法可以解析的任何字符串日期,但返回的字符串格式取决于值的 CultureInfo.CurrentCulture 属性。这意味着 DatePicker 可能会显示与用户键入的字符串不同的字符串。" - 您必须自己格式化 SelectedDate 属性。 【参考方案1】:

您应该使用SelectedDate 属性将当前选择的日期作为DateTime 获取,然后根据您的特定格式对其进行格式化:

string dateTemp = DatePicker_Date.SelectedDate?.ToString(App.DateFormat);

【讨论】:

谢谢!这对我有用!

以上是关于WPF DatePicker 自定义格式的主要内容,如果未能解决你的问题,请参考以下文章

WPF DatePicker:自定义显示文本

2021-08-14 WPF控件专题 DatePicker 控件详解

我如何将 Bootstrap 3 Datepicker 自定义为仅没有时间戳的日期

自定义 WPF DatePickerTextBox 模板

Datepicker 输出格式 Datagrid wpf

使用 jQuery datepicker 自定义日期格式验证(无法摆脱美国日期验证)