48

なぜこのコード行は

<TextBlock Text="{Binding Net, StringFormat=c}"/>

すべての地域設定が英国に設定されている場合、結果を $xx.xx として出力します。£xx.xxとして出力されると思います。何か案は?StringFormat={}{0:C} を含む stringformat のさまざまなバリエーションを試しましたが、それでも同じ結果が得られます。

ご覧いただきありがとうございます。

4

3 に答える 3

75

これが.NET4で修正されているかどうかはわかりませんが、通貨や日付などをレンダリングするときに、WPFが現在のカルチャを取得したことはありません。それは私が大規模な見落としだと思うものですが、ありがたいことに簡単に修正できます。

アプリクラスの場合:

protected override void OnStartup(StartupEventArgs e)
{
    FrameworkElement.LanguageProperty.OverrideMetadata(
        typeof(FrameworkElement),
        new FrameworkPropertyMetadata(
            XmlLanguage.GetLanguage(
            CultureInfo.CurrentCulture.IetfLanguageTag)));
    base.OnStartup(e);
 }

詳細については、この優れた投稿を参照してください。

于 2010-05-04T11:03:16.390 に答える
20

私にとってうまくいくもの:
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 (まだテストしていませんが...)

于 2012-08-24T19:21:25.063 に答える