UWP - Смена языков - PullRequest
       6

UWP - Смена языков

0 голосов
/ 20 февраля 2019

Я пытаюсь изменить язык в приложении UWP, чтобы объекты my 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: обновить страницу после смены языка

C # программно изменить язык приложения UWP в реальном времени

Спасибо

1 Ответ

0 голосов
/ 07 мая 2019

Я сообщил об этой проблеме, и в настоящее время существует обходной путь, который использует задержку после вызова метода 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());               
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...