WPF StringFormat = {0: C} che mostra come dollari
-
03-10-2019 - |
Domanda
Perché questa riga di codice
<TextBlock Text="{Binding Net, StringFormat=c}"/>
Output il risultato da $ xx.xx quando tutte le mie impostazioni regionali sono impostate nel Regno Unito. Mi aspetto che in uscita come £ xx.xx. Qualche idea? Ho provato diverse varianti del StringFormat tra cui StringFormat = {} {0: C}. Ma ancora ottenere lo stesso risultato
Grazie per lo sguardo.
Soluzione
Non sono sicuro se questo è stato risolto in .NET 4, ma WPF ha mai preso in mano la cultura corrente durante il rendering cose come valuta o date. E 'qualcosa che considera una svista enorme, ma per fortuna è facilmente correggibile.
Nella classe App:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
Vedere questa eccellente messaggio per ulteriori informazioni.
Altri suggerimenti
Lo faccio Language = "it-IT" nella finestra principale per es.
<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">
Quello che funziona per me:
1) In app.xaml esclusione OnStartup () e aggiungere - System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) Definire in XAML @ livello Window - 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}}" />
Questo correttamente preleva ogni personalizzata ??strong> Impostazioni internazionali. Anche se sto usando un creati manualmente CultureInfo nella prima fase, sono sicuro che è possibile passare in uno dei tipi statici - ad es. System.Globalization.CultureInfo.CurrentCulture (non ho provato, però ...)