我目前正在开发一个 Metro 应用程序,用户可以在其中更改运行时的当前语言,并且加载的所有自定义控件都必须更新与新语言相关的文本。问题是,当我使用以下代码更改语言时,应用程序语言会更改,但它只会在我重新启动我的应用程序时更新文本,因为已经呈现的页面和控件已被缓存。
LocalizationManager.UICulture = new System.Globalization.CultureInfo((string)((ComboBoxItem)e.AddedItems[0]).Tag);
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ((ComboBoxItem)e.AddedItems[0]).Tag as String;
我应该怎么做才能在运行时强制更新所有自定义控件的文本而不重新启动我的应用程序?
最佳答案
使用这个:
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));
关于c# - 在运行时即时更改应用程序语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20345029/