c# - 在运行时即时更改应用程序语言

标签 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;

我应该怎么做才能在运行时强制更新所有自定义控件的文本而不重新启动我的应用程序?

最佳答案

使用这个:

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/

相关文章:

c# - MVC 多次提交表单

c# - (离线)验证 SSL 连接

xaml 根据另一种颜色定义颜色

c# - 另一个 System.Runtime.InteropServices 错误

c# - 在 Windows 8.1 应用程序中使用使用 Visual C++ 2012 构建的 Windows 8.0 扩展 SDK 组件

html - 如何防止 Windows 8.1/8 上的 Modern UI IE 11 自动缩放?

c# - MVC 5 使用一个附加参数上传文件 (POST)

c# - 无法让 Fiddler 使用 localhost 不同端口捕获来自 MVC 的 HttpClient Web api 调用

c# - 在项目 C# Windows 应用商店应用程序之外添加图像

windows - Directshow - 识别内置(集成摄像头)与外部 USB 摄像头