wpf stringformat = {0:c}はドルとして表示されます
-
03-10-2019 - |
質問
なぜこのコード行があるのか
<TextBlock Text="{Binding Net, StringFormat=c}"/>
私のすべての地域設定が英国に設定されている場合、結果は$ xx.xxとして出力します。 £xx.xxとして出力すると予想されます。何か案は? StringFormat = {} {} {0:c}を含むStringFormatのさまざまなバリエーションを試しましたが、それでも同じ結果が得られます。
見てくれてありがとう。
解決
これが.NET 4で修正されたかどうかはわかりませんが、WPFは通貨や日付などをレンダリングする際に現在の文化を取り上げたことはありません。それは私が大規模な監視と考えるものですが、ありがたいことに簡単に修正されます。
アプリクラスで:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
見る この素晴らしい投稿 詳細については。
他のヒント
私は言語= "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()およびadd-をオーバーライドします - 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 最初のステップでは、静的タイプのいずれかを渡すことができると確信しています。 System.globalization.CultureInfo.CurrentCulture (私はそれをテストしていません...)