Windows Phone 8.1在本地化中重新加载/刷新页面

时间:2015-11-04 06:51:41

标签: c# windows-phone-8.1

您好我正致力于本地化。我有一个列表框。如果我在列表框中更改语言。整个应用程序必须更改为该语言(包括当前页面)。

所以我从列表框中获取了该语言并分配给

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = cul;

问题1:我想重新加载/刷新当前页面(例如:Page1)?

private void LocList_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
{
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = cul;
    var resourceContext = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView();
    resourceContext.Reset();
}

这不起作用。我也试过

private void LocList_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
{
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = cul;
    var manager = Windows.ApplicationModel.Resources.Core.ResourceManager.Current;
    manager.DefaultContext.QualifierValues.MapChanged += QualifierValues_MapChanged;
}

private void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event)
{
    ResourceContext.ResetGlobalQualifierValues(); 
    //ResourceManager.Current.DefaultContext.Reset();
}

问题2:如果我从Page1导航到Page2,则更改的语言将应用于page2。但是,如果我回到Page1,则不会应用语言更改。

问题2(续):我的意思是如果我从Page2导航到Page1。 Page1构造函数没有命中(如果构造函数被命中,则页面初始化将发生正确的输出)。

如果我做错了,请指导我。

2 个答案:

答案 0 :(得分:0)

谢谢大家。我有输出。 问题是,缓存设置为Required。现在修复它我禁用了缓存

  this.NavigationCacheMode = NavigationCacheMode.Disabled;

以前是NavigationCacheMode.Required。 这是问题2的修复

现在问题1:此代码使我的页面刷新

 var _Frame = Window.Current.Content as Frame;
        _Frame.Navigate(_Frame.Content.GetType());
        _Frame.GoBack(); // remove from BackStack

答案 1 :(得分:0)

广告。 1尝试将列表框中的事件类型更改为SelectionChanged,即从LocList_SelectedIndexChanged更改为LocList_SelectionChanged。

广告。 2不确定但是你使用的是哪个版本的WP8.1(silverlight?/ win-rt?),两者的导航都不同。但是作为一个快速的建议(假设win-rt版本)不使用GoBack()方法,但尝试重新加载语言不是在构造函数中而是在OnNavigatedTo()方法中。

无论如何都要尝试提供更多代码。

祝你好运。