No WPF 3.5SP1 eu uso o último recurso StringFormat em DataBindings:
<TextBlock Text="{Binding Path=Model.SelectedNoteBook.OriginalDate, StringFormat='f'}"
FontSize="20" TextTrimming="CharacterEllipsis" />
O problema que enfrento é que a data é sempre formatada em inglês ... embora meu sistema seja em francês? Como posso forçar a data a seguir a data do sistema?
wpf
datetime
localization
Pavel Anikhouski
fonte
fonte
Respostas:
Da criação de um assistente internacionalizado no WPF
fonte
Defina o seguinte namespace xml:
Agora, observe esta solução fantástica:
Estou bem ciente de que essa não é uma correção global e você precisará dela em cada um de seus Bindings, mas certamente isso é apenas um bom XAML. Pelo que eu sei, da próxima vez que a ligação for atualizada, ela usará o correto
CultureInfo.CurrentCulture
ou o que você forneceu.Esta solução atualizará imediatamente seus Bindings com os valores corretos, mas parece muito código para algo tão raro e inócuo.
fonte
Eu só queria acrescentar que a resposta de Loraderon funciona muito bem na maioria dos casos. Quando coloco a seguinte linha de código em meu App.xaml.cs, as datas em meus TextBlocks são formatadas na cultura correta.
Eu digo 'a maioria dos casos'. Por exemplo, isso funcionará fora da caixa:
... mas ao usar Run's em um TextBlock, o DateTime é formatado na cultura padrão.
Para que isso funcionasse, eu precisava da resposta de Gusdor , a saber, adicionar ConverterCulture = {x: Static gl: CultureInfo.CurrentCulture} ao Binding.
Espero que esta resposta adicional seja útil para alguém.
fonte
Basta inserir o atalho de cultura para a tag de nível superior:
por exemplo:
fonte
DatePicker
para fazer o seu trabalho, então esta solução fácil foi me rapidamente de volta aos trilhos!Como já foi dito, o padrão de XAML é a cultura invariável (en-US) e você pode usar
para definir a cultura para a cultura padrão para o idioma da cultura atual. Mas o comentário está errado; isso não usa a cultura atual, pois você não verá nenhuma personalização que o usuário possa ter feito, sempre será o padrão para o idioma.
Para realmente usar a cultura atual com personalizações, você precisará definir o
ConverterCulture
junto com oStringFormat
, como emcom o
gl
definido como um namespace global em seu elemento raizfonte
binding.ConverterCulture = System.Globalization.CultureInfo.CurrentCulture;
Se você precisar alterar o idioma enquanto o programa está sendo executado, você pode apenas alterar a propriedade Language em seu elemento raiz (não tenho certeza se isso tem um efeito instantâneo ou se o subelemento precisa ser recriado, no meu caso isso funciona pelo menos)
fonte
O código completo para mudar a localização também em elementos como
<Run />
este:fonte
Se você quiser mudar as informações de cultura em tempo de execução, você pode usar um comportamento (veja abaixo)
fonte
Se você estiver trabalhando com código em vez de XAML, pode definir o ConverterCulture da seguinte maneira:
Parabéns a @KZeise por apontar a diferença sutil entre usar a definição de cultura padrão e usar a definição de cultura personalizada do usuário.
fonte
Use Label (incluindo Cultture) e não texblock
fonte