如何在WPF中设置和更改区域性

您所在的位置:网站首页 有文化的程序 如何在WPF中设置和更改区域性

如何在WPF中设置和更改区域性

#如何在WPF中设置和更改区域性| 来源: 网络整理| 查看: 265

我有一个.NET 4.0WPF应用程序,用户可以在其中更改语言(文化)。我只需让用户选择一种语言,创建相应的CultureInfo并设置:

Thread.CurrentThread.CurrentCulture = cultureInfo; Thread.CurrentThread.CurrentUICulture = cultureInfo;

在C#代码中,这可以很好地工作。然而,在WPF控件中,文化仍然是en-US。例如,这意味着日期将以美国格式显示,而不是以当前文化的正确格式显示。

显然,这不是一个bug。根据MSDN和StackOverflow上的几篇博客文章和文章,WPF语言不会自动遵循当前的文化。它是en-US,直到你这样做:

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

有关示例StringFormat Localization issues in wpf,请参阅。

我不完全理解这里发生了什么。所有框架元素上的Language属性似乎都设置为当前区域性。不管怎么说,它是有效的。我在应用程序启动时执行此操作,现在所有控件都按预期工作,例如,日期根据当前区域性进行格式化。

但现在的问题是:根据MSDN,FrameworkElement.LanguageProperty.OverrideMetadata只能被调用一次。事实上,如果我再次调用它(当用户更改语言时),它将抛出一个异常。所以我还没有真正解决我的问题。

问题:在我的应用程序生命周期中,如何在任何时候多次可靠地更新WPF中的区域性?

(我在研究时发现了这一点:http://www.nbdtech.com/Blog/archive/2009/03/18/getting-a-wpf-application-to-pick-up-the-correct-regional.aspx,似乎他在那里有什么工作。然而,我无法想象如何在我的应用程序中做到这一点。似乎我必须在所有打开的窗口和控件中更新语言,并刷新所有现有的绑定等。)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3