【问题标题】:UWP - Change of LanguagesUWP - 语言变更
【发布时间】: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


【解决方案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());               
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 2017-04-02
    • 2018-05-27
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2017-12-21
    • 2017-08-13
    相关资源
    最近更新 更多