2

私はDatePickerWPFアプリケーションで作業しています。の日付形式をシステムの日付形式に変更したいと考えてい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;

しかし、子ウィンドウを開いてもフォーマットは変わりません。

問題の内容と、この問題を解決する方法を知っている人はいますか?

4

1 に答える 1

1

この回答 ( 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();
于 2012-07-27T12:25:22.573 に答える