如何在WPF中设置和更改区域性 |
您所在的位置:网站首页 › 有文化的程序 › 如何在WPF中设置和更改区域性 |
我有一个.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 |