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 自定义格式的主要内容,如果未能解决你的问题,请参考以下文章
2021-08-14 WPF控件专题 DatePicker 控件详解