WPF XAML StringFormat: Культура Обходной путь сломан в C # 4.0? - PullRequest
4 голосов
/ 22 апреля 2010

Работа вокруг ...

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

... раньше работал до сих пор (упомянуто здесь: Проблемы локализации StringFormat в wpf ).

Вместо этого, пока я не перенес свое приложение с 3.5SP1 на 4.0, оно работало. Но теперь в 4.0 перестал работать снова. Кто-нибудь испытывает это?

РЕДАКТИРОВАТЬ: Теперь он даже не работает в 3.5SP1. Я думаю, что это как-то связано с установкой 4.0, так как раньше это работало.

Не работает ни добавление обходного пути, ни удаление. Я даже пытался добавить ...

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

до Window конструктор. Это тоже не сработало.

1 Ответ

0 голосов
/ 04 июля 2011

1. Убедитесь, что вы переопределяете значение по умолчанию LanguageProperty как можно раньше. Статический конструктор приложения - лучшая ставка. Это важно, потому что BindingExpression кэширует значение этого свойства и не переоценивает его впоследствии по соображениям производительности.

2. Какой у вас CultureInfo.CurrentCulture? Вы уверены, что это тот, который вы ожидаете увидеть?

3. Переопределение метаданных свойства Language не действует, если вы укажете атрибут xml:lang где-то вверху в дереве. Например. если вы скажете:

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

Вы получите итальянскую валюту независимо от того, что вы указали в метаданных свойства.

4. Переопределение метаданных свойства Language не действует, если вы указали свойство ConverterCulture в привязке. Например. если вы скажете: <TextBlock Text="{Binding StringFormat=C, ConverterCulture=ja}"/>, вы получите японскую валюту независимо от того, что вы указали в метаданных свойства или в атрибуте xml:lang.

Насколько я знаю, это поведение не менялось между фреймворками.

Надеюсь, это поможет

...