WPF String = {0: C} zeigt als Dollar
-
03-10-2019 - |
Frage
Warum diese Codezeile
<TextBlock Text="{Binding Net, StringFormat=c}"/>
Ausgabe das Ergebnis als xx.xx $, wenn alle meine regionalen Einstellungen Großbritannien gesetzt. Ich erwarte, dass es als £ xx.xx ausgegeben wird. Irgendwelche Ideen? Ich habe versucht, verschiedene Varianten des String einschließlich String = {} {0: C}. Aber immer noch das gleiche Ergebnis
Dank für das Schauen.
Lösung
Ich bin nicht sicher, ob dies wurde in .NET 4, behoben, aber WPF hat nie die aktuelle Kultur aufgenommen, wenn die Dinge wie eine Währung oder Termine zu machen. Es ist etwas, das ich betrachte eine massive Aufsicht, aber zum Glück ist leicht korrigiert.
Ihre App-Klasse:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
Unter diese ausgezeichnete Post für weitere Informationen.
Andere Tipps
ich Language = "en-GB" im Hauptfenster z.
<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">
Was funktioniert für mich:
1) In App.xaml Überschreibung OnStartup () und fügen Sie - System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) Definieren Sie in XAML @ Fensterebene - xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
3) In XAML - <TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />
Das richtig picks up jeden benutzerdefinierte Ländereinstellungen. Obwohl ich bin mit einem manuell erstellt Culture im ersten Schritt, ich bin sicher, dass es möglich ist in einem der statischen Typen passieren - zB. System.Globalization.CultureInfo.CurrentCulture (ich habe es allerdings nicht getestet ...)