2015-10-23 1 views
1

Je vois un comportement étrange dans une application WPF (que j'ai reproduite dans un exemple d'application pour être sûr). Lorsque l'application démarre, je mets CultureInfo.CurrentCulture et CultureInfo.CurrentUICulture à, par exemple. Français, avant le chargement de la fenêtre principale de l'application. Ensuite, les principales charges de la fenêtre de l'application et le texte localisé apparaît comme prévu, en français, comme ceci:La culture se réinitialise sur le bouton cliquer dans l'application WPF

<Window.Resources> 
    <Strings x:Key="Resources"/> 
</Window.Resources 

<Button Content={Binding Label, Source={StaticResource Resources}}/> 

Le problème est que si je clique sur le bouton, la culture et le texte du bouton se réinitialisée à en-US. J'ai ajouté un gestionnaire d'événement pour l'événement Click et à l'intérieur, CurrentCulture et CurrentUICulture sont tous les deux réinitialisés sur "en-US".

Une idée pourquoi cela se produit? Il semble étrange que cela se produise automatiquement.

Note: J'ai aussi essayé de faire

var cultureName = CultureInfo.CurrentCulture.Name; 
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), 
      new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(cultureName))); 

et

this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag); 

avant les principales charges de la fenêtre, mais il ne suffit pas, la culture devient encore remise à zéro.

MISE À JOUR: J'ai aussi posé la question sur les forums WPF (https://social.msdn.microsoft.com/Forums/vstudio/en-US/884af2cb-fcc3-4cfe-bea0-7a84f74583a8/culture-gets-reset-on-button-click?forum=wpf). Là, j'ai décrit le scénario actuel peut-être un peu mieux: je dois être en mesure de définir une culture spécifique lorsque l'application démarre et qu'elle soit "préservée" pendant toute la durée de vie de l'application. Malheureusement, lorsque vous cliquez sur un bouton, la culture est réinitialisée, comme décrit.

+0

Cette question PEUT avoir les réponses dont vous avez besoin. Il semble que la culture ne soit pas appliquée aux contrôles pour une raison quelconque. Je ne sais pas s'il y a beaucoup de choses à faire à ce sujet. http://stackoverflow.com/questions/4041197/how-to-set-change-the-culture-in-wpf –

+0

Ce qui est intéressant est que si je mets un point d'arrêt dans le gestionnaire de clic du bouton, la culture se réinitialise à en-US seulement la première fois qu'il est frappé. Si, après l'avoir cliqué une fois, j'ai redéfini la culture française puis cliqué à nouveau sur le bouton, CurrentCulture et CurrentUICulture sont tous les deux français. –

Répondre

0

Cela peut avoir quelque chose à voir avec votre méthode Window.Resources-> Binding d'affichage des chaînes de ressources. J'afficher des chaînes de localisation comme ceci:

<Window x:Class="CultureTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:p="clr-namespace:CultureTest.Properties" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Button Content="{x:Static p:Resources.Greeting}"/> 
</Grid> 

et le réglage de la culture dans App.OnStartup:

protected override void OnStartup(StartupEventArgs e) 
{ 
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ru-RU"); 
    base.OnStartup(e); 
} 

il garde sa culture très bien. Est-ce une option pour vous?

+0

Malheureusement, ce n'est pas une option car je dois être capable de changer dynamiquement la culture au moment de l'exécution (l'utilisateur sélectionne dans une liste) et l'utilisation de l'extension x: Static ne fonctionne pas dans ce cas (le contenu du bouton changement) –