web-dev-qa-db-ja.com

WPF StringFormat = {0:C}ドルとして表示

なぜこのコード行は

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

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

見てくれてありがとう。

42
Coesy

これが.NET 4で修正されたかどうかはわかりませんが、通貨や日付などをレンダリングするときにWPFが現在の文化を取り上げたことはありません。私は大規模な見落としと考えていますが、ありがたいことに簡単に修正できます。

Appクラスで:

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

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

67
Matt Hamilton

メインウィンドウでLanguage = "en-GB"を実行します。

<Window x:Class="AllocateWPF.Vouchers"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    Title="Test" Height="692" Width="1000" Language="en-GB">
26
Michael Harper

私のために働くもの:
1)app.xamlでOnStartup()をオーバーライドして追加-System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");

2)XAML @ウィンドウレベルで定義-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(テストしていませんが...)

17
Marko