2010-10-30 13 views
10

Tengo un pequeño problema con el formato actual de mi número de moneda negativo. Aquí hay una captura de pantalla que resume mi situación.Número de moneda negativa XAML

  1. Así es como estoy usando StringFormat en mi encuadernación. (Por cierto, yo sólo probamos {0: C})
  2. Como era de esperar
  3. La configuración actual de mi equipo para la moneda número negativo 4.
  4. El resultado cuando estoy corriendo mi solicitud

alt text

¿Por qué el resultado no es -0,08 $?

¿Alguna idea de cómo debo proceder?

Gracias por su tiempo.

ACTUALIZACIÓN:

traté de resolver el problema con un convertidor, aquí está el resultado:

  • encontré que el Thread.CurrentThread.CurrentUICulture no era el mismo que el Thread.CurrentThread.CurrentCulture, por lo que me fijo en mi App.xaml.cs. Lamentablemente, el mismo resultado.
  • Intenté mostrar mis valores a través de un convertidor para ver si podía solucionar el problema. El hecho es que la cultura recibida en los parámetros del método Convert estaba bien, pero su CurrentNegativePattern no era el mismo que en el Thread.CurrentThread.CurrentCulture. Esa es probablemente la razón por la que tengo este problema. por el momento, usaré esto: return ((double)value).ToString("C2", Thread.CurrentThread.CurrentCulture); en el método Convert de mi convertidor.
+0

+1 - No estoy seguro tampoco, probablemente de alguna manera relacionado con el cultivo utilizado. Tal vez una forma de especificar eso en el XAML? http://shujaatsiddiqi.blogspot.com/2010/08/wpf-localization-stringformat-for.html muestra cómo forzar la cultura actual en el constructor para la ventana - tal vez dar una oportunidad para la depuración. –

+0

+1 para anular el 'LanguageProperty'; no lo sabía –

+0

@Merlyn Morgan-Graham: Desafortunadamente, esto no es exactamente lo que estaba buscando. Pero gracias por el consejo ! – esylvestre

Respuesta

1

intente cambiar el CurrentCulture-CurrentUICulture:

FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement), 
    new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag)) 
); 

Tenga en cuenta sin embargo que esto no se puede utilizar la configuración regional. El objeto CultureInfo describe la configuración regional, pero lo que está haciendo con el IetfLanguageTag es extraerlo a una cultura específica. Esa cultura no tiene los ajustes que ha realizado en su configuración regional.

Como alternativa, puede echar un vistazo a la opción ConvertCulture de la encuadernación. Esto realmente toma un CultureInfo.

+0

Desafortunadamente, no funciona. – esylvestre

+0

Eso es porque no tiene forma de especificar los detalles de la cultura, y utiliza la configuración genérica de la cultura. Creo que la única forma en que puede lograr esto es utilizando la propiedad 'ConverterCulture' del enlace, pero creo que será un dolor aplicarlo. De hecho, esto toma un 'CultureInfo', pero no parece fácil de usar. –

+0

Entonces, ¿qué opinas sobre la solución que estoy utilizando actualmente (ver la actualización en mi publicación principal? Estoy hablando de un convertidor que utiliza el CurrentThread.CurrentCulture-)? – esylvestre