我正在尝试更改 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
谢谢
最佳答案
我已经报告了这个问题,目前有一个解决方法是在调用 Reset
方法后使用延迟。你可以引用下面的代码。
using System.Threading.Tasks;
static bool m_bFirstLanguageChangeNavigation = true;
async private void Show_Click(object sender, RoutedEventArgs e)
{
var context = ResourceContext.GetForCurrentView();
var selectedLanguage = MyComboBox.SelectedValue;
var lang = new List<string>();
lang.Add(selectedLanguage.ToString());
ApplicationLanguages.PrimaryLanguageOverride = selectedLanguage.ToString();
ResourceContext.GetForCurrentView().Reset();
ResourceContext.GetForViewIndependentUse().Reset();
//added to work the first time
if (m_bFirstLanguageChangeNavigation)
{
m_bFirstLanguageChangeNavigation = false;
await Task.Delay(100);
}
Frame.Navigate(this.GetType());
}
关于c# - UWP - 语言的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789409/