WPF StringFormat = {0: C} mostrando como dólares
-
03-10-2019 - |
Pregunta
¿Por qué esta línea de código
<TextBlock Text="{Binding Net, StringFormat=c}"/>
salida el resultado como $ xx, xx, cuando todos mis ajustes regionales se establecen en el Reino Unido. Espero que la salida como £ xx, xx. ¿Algunas ideas? He probado diferentes variaciones de la StringFormat incluyendo StringFormat = {} {0: C}. Pero aún así obtener el mismo resultado
Gracias por mirar.
Solución
No estoy seguro si esto se ha solucionado en .NET 4, pero WPF nunca ha recogido la cultura actual cuando se representa cosas como moneda o fechas. Es algo que considero una supervisión masiva, pero por suerte se corrige fácilmente.
En su clase de aplicación:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
Consulte este excelente poste para más información.
Otros consejos
hago Language = "en-GB" en la ventana principal por ejemplo.
<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">
Lo que funciona para mí:
1) En App.xaml OnStartup override () y añadir - System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) Definir en XAML @ nivel de la ventana - xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
3) En XAML - <TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />
Este correctamente recoge cualquier costumbre Configuración regional. A pesar de que estoy usando un creados manualmente CultureInfo en el primer paso, estoy seguro de que es posible pasar de uno de los tipos estáticos - por ejemplo. System.Globalization.CultureInfo.CurrentCulture (no he probado aunque ...)