【发布时间】:2019-02-20 15:06:24
【问题描述】:
我正在尝试更改 UWP 应用程序的语言,以便我的 x:uid 相关对象和我的基于 ResourceLoader 的对象会发生变化。 按照其他问答中的建议,我正在使用:
ApplicationLanguages.PrimaryLanguageOverride = newLanguage;
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
Frame.Navigate(this.GetType());
但是,由 ResourceLoader 直接控制的所有内容都会更改,并且在 xaml 中使用 x:uid 创建的任何内容都不会更改。如果我再次更改语言,x:uid 将更改为以前的语言,其余的则为新选择的语言。
我认为有两个原因可能与线程行为有关。首先,修复它的建议是在导航之前延迟线程。其次,我在虚拟机和物理机上有不同的行为(这个错误显然发生在物理机上)。
非常感谢提供不基于延迟线程的良好功能的解决方案或解释。
其他一些相关问答:
UWP MVVM: refresh page after change of language
C# change app language programmatically UWP realtime
谢谢
【问题讨论】:
-
我可以重现这个问题,我认为它与 IO 速度有关。可能
x:uid还没有准备好。我会将此问题报告给相关团队。 -
嘿,谢谢!在对我的虚拟机进行了一些升级后,我也复制了它。据我了解,在我使用 Frame.Navigate(..) 创建新线程之前,Reset() 并未完成其工作。现在我根据 PrimaryLanguageOverride() 和 ResourceContext 的语言限定符的比较来延迟..
-
是的,在我看来,
ApplicationLanguages需要添加事件处理程序来检测Reset完成。 -
同样的问题,有什么更新吗?
-
到目前为止我最好的解决方案是上面的那个。也许@NicoZhu-MSFT 有新的东西要分享?
标签: c# multithreading uwp