我正在使用WPF应用程序中的DatePicker
。我想将DatePicker
的日期格式更改为系统日期格式。
这是邮件窗口:
<Window x:Class="DateTimeDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button x:Name="Btn" Width="100" Click="Btn_Click">Click</Button>
</StackPanel>
</Window>
使用以下代码打开子窗口:
private void Btn_Click(object sender, RoutedEventArgs e)
{
ChiildWindow Cw = new ChiildWindow();
Cw.ChildDatePicker.SelectedDate = DateTime.Now;
Cw.ShowDialog();
Cw.Focus();
}
这是子窗口,只包含DatePicker
:
<Window x:Class="DateTimeDemo.ChiildWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ChiildWindow" Height="300" Width="300">
<StackPanel>
<DatePicker x:Name="ChildDatePicker"/>
</StackPanel>
</Window>
当我打开子窗口时,格式取自系统文化,但是如果我在窗口打开后从控制面板更改系统日期格式,则格式不会改变。
我在ChildWindow.xaml.cs文件中尝试了以下代码:
Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture;
但是当我打开子窗口时,格式不会改变。
有谁知道问题是什么以及如何解决这个问题?
答案 0 :(得分:1)
根据这个答案(How to get current regional settings in C#?),您可以使用以下代码检测文化:
private class State
{
public CultureInfo Result { get; set; }
}
public CultureInfo GetCurrentCulture()
{
Thread.CurrentThread.CurrentCulture.ClearCachedData();
var thread = new Thread(s => ((State)s).Result = Thread.CurrentThread.CurrentCulture);
var state = new State();
thread.Start(state);
thread.Join();
var culture = state.Result;
}
最后,您需要设置CurrentUICulture属性以影响UI组件:
Thread.CurrentThread.CurrentUICulture = GetCurrentCulture();