【发布时间】:2014-08-28 20:59:19
【问题描述】:
我在更改应用的语言时遇到了问题。当用户更改组合框中的选定项时,应更改语言。
这是我的部分代码的 sn-p:
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
ResourceContext.GetForCurrentView().QualifierValues.MapChanged += QualifierValues_MapChanged;
}
private void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event)
{
ResourceContext.ResetGlobalQualifierValues();
}
组合框代码为:
private void cbLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0 && !String.IsNullOrEmpty(((ComboBoxItem)e.AddedItems[0]).Tag as string))
{
LocalizationManager.UICulture = new System.Globalization.CultureInfo((string)((ComboBoxItem)e.AddedItems[0]).Tag);
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = LocalizationManager.UICulture.Name;
int index = 0;
if (cbLanguage.SelectedIndex == 0 || cbLanguage.SelectedIndex < 0)
{
index = cbLanguage.Items.Count - 1;
}
else
{
index = cbLanguage.SelectedIndex - 1;
}
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = (string)((ComboBoxItem)cbLanguage.Items[index]).Tag as String;
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ((ComboBoxItem)e.AddedItems[0]).Tag as String;
if (languageChange != null)
{
languageChange(sender, new EventArgs());
}
}
else
{
LocalizationManager.UICulture = System.Globalization.CultureInfo.CurrentUICulture;
}
}
这会返回访问冲突错误。
能否请您帮帮我,以便应用正确更改语言?
【问题讨论】:
-
我已尝试运行此代码,但未调用函数“MapChanged”。你能分享一下组合框的代码吗?也许这会帮助我重现你的问题。
-
嗨@BryanStump,我已经用组合框代码更新了帖子。感谢您尝试帮助我。仅供参考,我为 Windows 8 应用程序编写的代码运行良好。当我将应用程序定位到 Windows 8.1 时发生这种情况。
-
我运行了代码,但无法重现错误。如果没有本地化管理器类并且不知道组合框项目上有哪些标签,则可能存在错误。
-
@BryanStump,让我感到困惑的是,该应用在面向 Windows 8 时运行良好,但在面向 Windows 8.1 后停止运行。
-
该代码不在此代码中,因为我可以运行它而不会出错。组合框项目中的标签是什么?您可以使用 try{}catch{} 吗?
标签: c# windows windows-8.1