CurrentCultureが変更されたときに、XAMLドキュメントから無効な動作が発生しています。私はいくつかのウィンドウでは、このような要素を持っている場合:WPF XAMLバインディングとCurrentCulture表示
<Window x:Class="WpfLocalizationLocBaml.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib"
x:Name="wndTest"
Title="Test" Height="300" Width="300">
<StackPanel>
<TextBlock x:Name="lblCultureName"
Text="{Binding Source={x:Static glob:CultureInfo.CurrentCulture},
Path=DisplayName}" />
<TextBlock x:Name="lblLocaleDateValue"
Text="{Binding ElementName=wndTest, Path=TestDate}"/>
<TextBlock x:Name="lblLocaleNumberValue"
Text="{Binding ElementName=wndTest,Path=NumberValue,StringFormat=c}" />
</StackPanel>
</Window>
だけでなく、MessageBox.Show(NumberValue.ToString( "c" を));フォームが開始されたら、私は別の結果を見ています。
デフォルトの言語でフォームを実行すると、明らかにすべてが明らかです。しかし、コード内の文化や起動時にカルチャを変更すると、日付と数値のバインドはen-US形式で表示されます。表示されるMessageBox.Show()値は、現在のカルチャを適切に反映します。
質問:WPFはバインディングでCurrentCultureを尊重しませんか?そしてもしそうなら、バインディングに使われる文化を正確に決めるもの。それは私のケースでは明らかにen-USですが、プロジェクトでデフォルト言語として設定した内容に関係なく、常にen-USにバインドされています。
感謝任意のアイデア...
私のWindows Phone 7アプリにはちょっとした変更が必要でした。 - this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.Name); –
ここで説明されているように、App.csですべてのバインディングを実行できます:http://stackoverflow.com/questions/2764615/wpf-stringformat-0c-showing-as-dollars – Heiner
'IetfLanguageTag'は推奨されていません。代わりに '.Name'を使うことができます。 – Mafii