WPFの地域設定

Thread.CurrentCultureはOSの地域設定から自動で設定されるが、XmlLanguageはOSの既定の設定によらずen-US固定のようです。
例えば、以下のようにXAMLで画面を作ると、
<Windowx:Class="WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF"
        mc:Ignorable="d"
        Title="MainWindow"Height="450"Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlockText="{Binding Now}"/>
    </Grid>
</Window>
    publicpartialclassMainWindow : Window
    {
        publicMainWindow()
        {
            InitializeComponent();

            this.DataContext = new {
                Now = DateTime.Now
            };
        }

    }
表示されるの時刻はUS形式になる。
こんな方法でOSの設定を反映できる。
        publicMainWindow()
        {
            this.Language = System.Windows.Markup.XmlLanguage.GetLanguage(System.Threading.Thread.CurrentThread.CurrentCulture.Name);
            InitializeComponent();

            this.DataContext = new {
                Now = DateTime.Now
            };
        }
日本でしか使わないなら、XAMLにxml:langを設定してしまうのもあり。
<Windowx:Class="WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF"
        mc:Ignorable="d"
        xml:lang="ja-JP"
        Title="MainWindow"Height="450"Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlockText="{Binding Now}"/>
    </Grid>
</Window>

コメント

このブログの人気の投稿

ORACLEのCHAR型とPostgreSQLのchar型は似て非なるもの

Tomcat10 + log4j2

XBox360コントローラドライバのせいでコア分離セキュリティが有効にできない場合