none
InputScope não acata CurrentUICulture RRS feed

  • Pergunta

  • Pessoal,

    Fazendo uma App multi language encontrei um problema com valores decimais.

    Utilizo o Thread.CurrentThread.CurrentUICulture para saber a cultura corrente e quando está indicando pt-BR, o recurso InputScope="CurrencyAmount" traz o teclado com o PONTO decimal, em vez de VÍRGULA decimal (seria um bug?).

    Ou seja, quando este valor é jogado do TextBox para uma variável decimal, não é considerado como valor decimal. Exemplo:

    Valor informado no textbox: 12.63

    decimal decValor = Convert.ToDecimal(this.txtValor.Text);

    Para en-US, decValor = 12.63

    Para pt-BR, decValor = 1263

    Já tentei usar um outro recurso, onde tento converter o decimal de acordo com a cultura, mas sem efeito:

    decimal decValor = Convert.ToDecimal(this.txtValor.Text.ToString(), Thread.CurrentThread.CurrentUICulture);

    Para contornar provisoriamente, chamei outro escopo de teclado que contenha a vírgula, apesar de ser alfanumérico.

    Agradeço a ajuda!



    quinta-feira, 14 de junho de 2012 18:53

Respostas

  • Ora viva,

    Independentemente da CurrentCulture (ou mesmo da CurrentUICulture), o teclado apresenta SEMPRE o "." como separador decimal!

    Para resolver este tipo de situações, o ideal será interpretares todos os dados introduzidos usando uma InvariantCulture.

    Assim, o teu decValor será obtido da seguinte forma:

    decimal decValor = Convert.ToDecimal(this.txtValor.Text, System.Globalization.CultureInfo.InvariantCulture);
    Usando esta técnica garante que independentemente do CurrentCulture, todos os números serão tratados usando a InvariantCulture e assim tens sempre os números correctamente interpretados.

    Pedro Lamas
    DevScope | Senior Software Development Engineer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas

    sexta-feira, 15 de junho de 2012 09:30

Todas as Respostas

  • Ora viva,

    Independentemente da CurrentCulture (ou mesmo da CurrentUICulture), o teclado apresenta SEMPRE o "." como separador decimal!

    Para resolver este tipo de situações, o ideal será interpretares todos os dados introduzidos usando uma InvariantCulture.

    Assim, o teu decValor será obtido da seguinte forma:

    decimal decValor = Convert.ToDecimal(this.txtValor.Text, System.Globalization.CultureInfo.InvariantCulture);
    Usando esta técnica garante que independentemente do CurrentCulture, todos os números serão tratados usando a InvariantCulture e assim tens sempre os números correctamente interpretados.

    Pedro Lamas
    DevScope | Senior Software Development Engineer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas

    sexta-feira, 15 de junho de 2012 09:30
  • Perfeito Pedro!

    Já testei e funcionou muito bem.

    Inclusive já fiz o feedback para a equipe do Windows Phone a respeito. Se acharem conveniente corrigir o teclado do escopo monetário, de acordo com a cultura, acredito que será bastante interessante para a experiência do usuário final.

    Mas sua solução deixa este problema transparente! Muito obrigado!


    Andrey Kurka

    sexta-feira, 15 de junho de 2012 14:23