【问题标题】:Windows Phone 8.1 Reload/Refresh a page in LocalisationWindows Phone 8.1 在本地化中重新加载/刷新页面
【发布时间】:2015-11-05 04:10:01
【问题描述】:

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

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

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:如果我从第 1 页导航到第 2 页,更改的语言将应用于第 2 页。但如果我回到第 1 页,则不会应用语言更改。

问题 2(续):我的意思是如果我从第 2 页导航到第 1 页。 Page1 构造函数没有命中(如果构造函数被命中,Page 初始化将碰巧获得正确的输出)。

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

【问题讨论】:

    标签: c# windows-phone-8.1


    【解决方案1】:

    谢谢大家。我得到了输出。 问题是,缓存设置为必需。现在要修复它,我禁用了缓存

      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 篇文章中我发现 public bool Reload() { return Reload(null); } private bool Reload(object param) { Type type = this.Frame.CurrentSourcePageType; if (this.Frame.BackStack.Any()) { type = this.Frame.BackStack.Last().SourcePageType;参数 = this.Frame.BackStack.Last().Parameter; } 尝试 { 返回 this.Frame.Navigate(type, param); } 最后 { this.Frame.BackStack.Remove(this.Frame.BackStack.Last()); } } 一段代码。这我得到了错误(即)Last()Any() 给出了错误。
    【解决方案2】:

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

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

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

    祝你好运。

    【讨论】:

    • 我正在使用 Win-rt。 1个疑问。如果我没有使用 GoBack()。我收到 1 个问题。现在我从 Page1->Page2 开始。更改语言(此处刷新 SO 页面)。现在我想做Page2-> Page1。这里根据 stack 会再次重定向 Page2 而不是 Page1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多