在RunTime上即时更改应用程序语言

Muh*_*mar 9 c# windows-runtime windows-8.1

我目前正在开发一个metro应用程序,用户可以在运行时更改当前语言,并且所有加载的自定义控件都必须更新有关新语言的文本.问题是,当我使用以下代码更改语言时,应用程序语言会更改,但只有在重新启动应用程序时才更新文本,因为已缓存的页面和控件已被缓存.

LocalizationManager.UICulture = new System.Globalization.CultureInfo((string)((ComboBoxItem)e.AddedItems[0]).Tag);
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ((ComboBoxItem)e.AddedItems[0]).Tag as String;
Run Code Online (Sandbox Code Playgroud)

如何在不重新启动应用程序的情况下强制在运行时更新所有自定义控件的文本?

CSh*_*per 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();
Run Code Online (Sandbox Code Playgroud)

然后使用 Navigate 方法重新加载页面:

if (Frame != null)
    Frame.Navigate(typeof(MyPage));
Run Code Online (Sandbox Code Playgroud)