WPF应用

时间:2015-10-23 14:34:34

标签: c# wpf localization cultureinfo

我在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)上也提出了这个问题。在那里,我描述了实际场景可能更好一些:我需要能够在应用程序启动时设置特定的文化,并在整个应用程序的生命周期中“保留”它。不幸的是,当点击按钮时,文化会被重置,如上所述。

1 个答案:

答案 0 :(得分:0)

可能与您的Window.Resources-&gt;显示资源字符串的绑定方法有关。我显示这样的本地化字符串:

<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);
}

它保持了它的文化。这是你的选择吗?