在运行时更改系统日期格式时,在DatePicker中更新日期格式

时间:2012-05-23 08:37:59

标签: wpf datepicker culture datetime-format

我正在使用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;

但是当我打开子窗口时,格式不会改变。

有谁知道问题是什么以及如何解决这个问题?

1 个答案:

答案 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();