なぜこのコード行は
<TextBlock Text="{Binding Net, StringFormat=c}"/>
すべての地域設定が英国に設定されている場合、結果を $xx.xx として出力します。£xx.xxとして出力されると思います。何か案は?StringFormat={}{0:C} を含む stringformat のさまざまなバリエーションを試しましたが、それでも同じ結果が得られます。
ご覧いただきありがとうございます。
なぜこのコード行は
<TextBlock Text="{Binding Net, StringFormat=c}"/>
すべての地域設定が英国に設定されている場合、結果を $xx.xx として出力します。£xx.xxとして出力されると思います。何か案は?StringFormat={}{0:C} を含む stringformat のさまざまなバリエーションを試しましたが、それでも同じ結果が得られます。
ご覧いただきありがとうございます。
これが.NET4で修正されているかどうかはわかりませんが、通貨や日付などをレンダリングするときに、WPFが現在のカルチャを取得したことはありません。それは私が大規模な見落としだと思うものですが、ありがたいことに簡単に修正できます。
アプリクラスの場合:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
詳細については、この優れた投稿を参照してください。
私にとってうまくいくもの:
1) app.xaml で OnStartup() をオーバーライドし、追加します -System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) XAML @ Window レベルで定義 -xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
3) XAML の場合 -<TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />
これにより、カスタムの地域設定が正しく取得されます。最初のステップで手動で作成したCultureInfoを使用していますが、静的な型の 1 つを渡すことができると確信しています。System.Globalization.CultureInfo.CurrentCulture (まだテストしていませんが...)