WPF StringFormat={0: C} mostrando como dólares
wpf datagrid stringformat (3)
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">
¿Por qué esta línea de código?
<TextBlock Text="{Binding Net, StringFormat=c}"/>
Imprima el resultado como $ xx.xx cuando todas mis configuraciones regionales estén configuradas en el Reino Unido. Espero que salga como £ xx.xx. ¿Algunas ideas? He intentado diferentes variaciones del formato de cadena, incluido StringFormat = {} {0: C}, pero todavía obtengo el mismo resultado.
Gracias por mirar.
Lo que funciona para mí:
1) En app.xaml anular OnStartup () y agregar - System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) Definir en XAML @ Nivel de 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 recoge correctamente cualquier configuración regional personalizada . Aunque estoy utilizando un CultureInfo creado manualmente en el primer paso, estoy seguro de que es posible pasar uno de los tipos estáticos, por ejemplo. System.Globalization.CultureInfo.CurrentCulture (no lo he probado ...)
No estoy seguro de si esto se ha solucionado en .NET 4, pero WPF nunca ha recogido la cultura actual al representar elementos como la moneda o las fechas. Es algo que considero un descuido masivo, pero afortunadamente se corrige fácilmente.
En tu 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);
}
Vea esta excelente publicación para más información.