c# - UWP - 语言的变化

标签 c# multithreading uwp

我正在尝试更改 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/

相关文章:

uwp - 分割 View 控制,当 Pane 打开时使内容变暗

c# - Worker Role流程-配置值轮询

c# - 通过 C# 和 WMI 的 RegistryTreeChangeEvent

c# - 在自定义应用程序中托管 MS Office 文档的更好选择?

c# - 信号量和多线程处理 Process.Start 的问题

xaml - ContentDialog 的大小不适合具有大 TextBlock 的通用应用程序中的内容

c# - 更新 mdb 数据库表

ios - 从异步回调更新 UI 的问题

java - 多线程快速排序没有给出预期的答案

uwp - 使用Powershell启动Metro风格的应用程序