我目前正在开发一个Metro应用程序,用户可以在运行时更改当前语言,并且所有加载的自定义控件都必须更新有关新语言的文本。问题是,当我使用以下代码更改语言时,应用程序语言会发生变化,但只有在我重新启动应用程序时才会更新文本,因为已经缓存的页面和控件都会被缓存。
LocalizationManager.UICulture = new System.Globalization.CultureInfo((string)((ComboBoxItem)e.AddedItems[0]).Tag);
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ((ComboBoxItem)e.AddedItems[0]).Tag as String;
如何在不重新启动应用程序的情况下强制在运行时更新所有自定义控件的文本?
答案 0 :(得分:3)
使用此:
var NewLanguage = (string)((ComboBoxItem)e.AddedItems[0]).Tag;
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = NewLanguage;
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
//Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();
Windows.ApplicationModel.Resources.Core.ResourceManager.Current.DefaultContext.Reset();
然后使用Navigate方法重新加载您的页面:
if (Frame != null)
Frame.Navigate(typeof(MyPage));
答案 1 :(得分:1)
为了立即响应,您需要重置资源管理器的上下文。
对于Windows 8.1: var resourceContext = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView();
resourceContext.Reset();
您仍然需要强制页面重绘自身,然后重新请求资源以进行更改。对于Windows 8,您可以看到https://timheuer.com/blog/archive/2013/03/26/howto-refresh-languages-winrt-xaml-windows-store.aspx
答案 2 :(得分:0)
您可以在this源代码的帮助下在运行时更改应用程序的语言。我从这里得到了帮助并操纵了我的应用程序的语言设置页面,如下所示:
在languageSettings.xaml.cs中:
Jan
***注意:在了解我在LanguageSettings页面的代码背后所做的事情之前,您必须按照前面所述的链接实现代码。而且还可以注意到我正在使用Windows Phone 8