Estoy trabajando en Namibia. Namibia no es una opción en la configuración regional de Windows e Idioma, pero comparte la mayoría de las características culturales con Sudáfrica, por lo que seleccionamos English South Africa y luego personalizar el símbolo de moneda para ser "N $" (dólares namibios) y no "R" "(Rand sudafricano).Cómo utilizar la configuración de región y de idioma personalizada de Windows en WPF
Sin embargo, no puedo convencer a WPF para que use la moneda personalizada. El uso de string.format("{0:c}", foo)
en el código funciona bien, pero al usar {Binding Path=SomeCurrencyValue, StringFormat=c
} `en XAML todavía se usa el símbolo" R "y no el símbolo" N $ "personalizado.
En App.xaml.cs
que establezca la Cultura de la aplicación con el siguiente código:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.LCID, true);
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
new FrameworkPropertyMetadata(
System.Windows.Markup.XmlLanguage.GetLanguage(
System.Globalization.CultureInfo.CurrentUICulture.IetfLanguageTag)));
Como demostración, aquí hay un código XAML que muestra el problema:
<StackPanel>
<TextBlock>
Formatted in XAML with: <LineBreak/>
Text="{Binding Path=SomeCurrencyValue, StringFormat=c}" <LineBreak/>
Result:
</TextBlock>
<TextBox Text="{Binding Path=SomeCurrencyValue, StringFormat=c, Mode=OneWay}"
Margin="5"/>
<TextBlock>
Formatted in code with: <LineBreak/>
return string.Format("{0:c}", SomeCurrencyValue); <LineBreak/>
Result:
</TextBlock>
<TextBox Text="{Binding Path=SomeCurrencyString, Mode=OneWay}"
Margin="5"/>
</StackPanel>
El DataContext
para la vista anterior contiene lo siguiente:
public double SomeCurrencyValue
{
get { return 34.95; }
}
public string SomeCurrencyString
{
get
{
return string.Format("{0:c}", SomeCurrencyValue);
}
}
Y el resu lt es el siguiente:
Yo sé que hay una pregunta similar here, pero yo tenía la esperanza de obtener mejores respuestas con una pregunta más completa. Principalmente estoy trabajando en aplicaciones financieras para clientes de Namibia, así que este es un problema bastante serio para mí: si no hay forma de hacerlo con .NET 4.0, consideraría presentar un informe de errores, pero solo quería verificar aquí primero .
EDIT:
acaba de abrir la recompensa por esta pregunta. Espero una solución que no sea una solución alternativa, o la confirmación de que se trata de un error y que se debe archivar como tal.
¿Intentó usar convertidores? esa es una opción para ti? – katie77
Mi problema con el uso de conversores es principalmente que luego tengo que hacer la conversión manualmente: con el formato de cadena en el enlace, la vinculación se ocupa de la entrada del usuario como "N $ 50" o "N $ 5 000 000.00". Hacerlo manualmente no será trivial, a menos que de alguna manera pueda extender el convertidor predeterminado, pero no sé si eso será posible. –
Estaba a punto de publicar una respuesta en la que se puede utilizar la propiedad 'Idioma' para cualquier' FrameworkElement' pero no pude hacerlo funcionar con Namibian Dollars. Lo más parecido que obtuve fue ' ' pero eso es Namibia English .. Además, no noté ninguna diferencia entre la presentación de moneda de Xaml o el código –