なぜこのコード行は
<TextBlock Text="{Binding Net, StringFormat=c}"/>
すべての地域設定が英国に設定されている場合、結果を$ xx.xxとして出力します。 £xx.xxとして出力することを期待しています。何か案は? StringFormat = {} {0:C}を含むstringformatのさまざまなバリエーションを試しましたが、同じ結果が得られます。
見てくれてありがとう。
これが.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);
}
詳細については、 この優れた投稿 を参照してください。
メインウィンドウで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">
私のために働くもの:
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(テストしていませんが...)