2010-04-22 3 views
4

Les travaux autour de ...WPF XAML StringFormat: Solution de contournement de la culture rompue en C# 4.0?

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

... travaillions jusqu'à présent (mentionné ici: StringFormat Localization issues in wpf). À la place, jusqu'à ce que j'ai porté mon application de 3.5SP1 à 4.0, cela fonctionnait. Mais maintenant, en 4.0, il a cessé de fonctionner à nouveau. Quelqu'un a-t-il vécu cela?

EDIT: Il ne fonctionne même pas dans 3.5SP1. Je pense que cela a quelque chose à voir avec l'installation de 4.0 comme précédemment cela fonctionnait.

Cela ne fonctionne pas en ajoutant la solution de contournement ou en la supprimant. J'ai même essayé d'ajouter ...

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

à Window constructeur. Cela n'a pas fonctionné non plus.

+0

MS a peut-être résolu le problème. Que se passe-t-il lorsque vous supprimez complètement le travail? Est-ce que le code fonctionne comme prévu. – ChrisF

+0

J'ai ajouté l'info dans la question. – Yogesh

+0

Où substituez-vous le LanguageProperty dans votre application? Dans votre application, fenêtre, etc? – CodeNaked

Répondre

0

1. Assurez-vous de surcharger la valeur par défaut de LanguageProperty le plus tôt possible. Le constructeur statique d'App est le meilleur pari. Ceci est important car BindingExpression met en cache la valeur de cette propriété et ne la réévalue pas par la suite pour des raisons de performances.

2. Quelle est votre CultureInfo.CurrentCulture? Êtes-vous sûr que c'est celui que vous attendez?

3. Redéfinition Language métadonnées de propriété n'a pas d'effet si vous vous spécifiez l'attribut xml:lang quelque part supérieure dans l'arbre. Par exemple. si vous dites:

<StackPanel xml:lang="it"> 
    <TextBlock Text="{Binding StringFormat=C}"/> 
</StackPanel> 

Vous obtiendrez la monnaie italienne, peu importe ce que vous définissez dans les métadonnées de la propriété.

4. Redéfinition Language métadonnées de propriété n'a pas d'effet si vous spécifiez ConverterCulture propriété dans la liaison. Par exemple. si vous dites: <TextBlock Text="{Binding StringFormat=C, ConverterCulture=ja}"/> vous obtiendrez la devise japonaise, peu importe ce que vous définissez dans les métadonnées de la propriété ou dans l'attribut xml:lang.

Ce comportement n'a pas été modifié entre les frameworks autant que je sache.

Espérons que cela aide

Questions connexes