我正在尝试在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
谢谢
答案 0 :(得分:1)
我已经报告了此问题,目前存在一种解决方法,该方法可以在调用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());
}