2015-10-23 7 views
1

Я вижу странное поведение в приложении WPF (которое я воспроизвел в примерном приложении, чтобы убедиться).Культура сбрасывается при нажатии кнопки в приложении WPF

Когда приложение запускается, я устанавливаю CultureInfo.CurrentCulture и CultureInfo.CurrentUICulture, например. Французский, перед загрузкой основного окна приложения. Тогда главное окно приложения нагрузки и локализованный текст появляется, как и ожидалось, на французском языке, например:

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

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

Проблема заключается в том, что если я нажимаю кнопку, культуру и текст кнопки получает сброс к EN-US. Я добавил обработчик событий для события Click и внутри него CurrentCulture и CurrentUICulture сбрасываются на «en-US».

Любая идея, почему это происходит? Кажется странным, что это как-то произойдет автоматически.

Примечание: Я также пробовал делать

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

и

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

до главного окна нагрузок, но это не помогает, культура все еще получает сброс.

ОБНОВЛЕНИЕ: Я задал вопрос также на форумах WPF (https://social.msdn.microsoft.com/Forums/vstudio/en-US/884af2cb-fcc3-4cfe-bea0-7a84f74583a8/culture-gets-reset-on-button-click?forum=wpf). Там я описал реальный сценарий, возможно, немного лучше: мне нужно настроить конкретную культуру при запуске приложения и сохранить его в течение всего срока действия приложения. К сожалению, при нажатии кнопки культура сбрасывается, как описано.

+0

Этот вопрос МОЖЕТ иметь ответы, которые вам нужны. По-видимому, культура почему-то не применяется к элементам управления. Не уверен, однако, что вы можете о нем многое сказать. http://stackoverflow.com/questions/4041197/how-to-set-and-change-the-culture-in-wpf –

+0

Что интересно, если я установил точку останова в обработчике кликов кнопки, культура будет сброшена на en-US только в первый раз, когда он попал. Если, щелкнув один раз, я снова вернусь к французской культуре, а затем снова нажмите кнопку, CurrentCulture и CurrentUICulture являются французскими. –

ответ

0

Возможно, что-то связано с вашим Window.Resources-> методом привязки отображения строк ресурсов. Я отображения локализации строк, как это:

<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> 

и установка культуры в App.OnStartup:

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

он держит это культура просто отлично. Это вариант для вас?

+0

К сожалению, это не вариант, так как мне нужно динамически изменять культуру во время выполнения (пользователь выбирает ее из списка), а использование расширения x: Static в этом случае не работает (содержимое кнопки не работает изменение) –

 Смежные вопросы

  • Нет связанных вопросов^_^