Aktualizacja kontrolek w aplikacji UWP po zmianie języka

0

W aplikacji UWP, którą tworzę są obsługiwane dwa języki. Po zmianie języka odświeżam interfejs aplikacji przeładowując go i wszystkie kontrolki są aktualizowane poza tymi, które zawierają domyślne elementy. Np. toggle switch posiada "On/Off", ale bez wiązania tych elementów z własnymi zasobami nie potrafię odświeżyć tych domyślnych, natywnych wartości. Wszystko co związane się odświeża, ale systemowe zmienne dopiero po restarcie.

Czy jest na to jakiś "myk"?

0

Boję się, że tak się nie da. Vide: https://stackoverflow.com/a/42899051

Aczkolwiek mam taki pomysł, aby spróbować ponownie wywołać InitializeComponent i zobaczyć, co się stanie.

0

Niestety tak jak wspomniałem w pierwszym poście, odświeżam apkę przeładowując MainPage, by wszystkie zmienne się załadowały ponownie, a co za tym idzie InitializeComponent dla MainPage wywołuje się automatycznie. Próbowałem też wywołać InitializeComponent klasy App, ale nic się nie zmienia.

Robię to tak:

Ustawienia:

        private void CBSelectLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {


                switch (CBSelectLanguage.SelectedIndex)
                {
                    case 0:
                        App.ChangeLanguage.Change("en");
                        SettingsMenagement.SetSettings("Language", "en", true);
                        break;
                    case 1:
                        App.ChangeLanguage.Change("pl");
                        SettingsMenagement.SetSettings("Language", "pl", true);
                        break;
                }

                var parentFrame = Window.Current.Content as Frame;
                parentFrame.Navigate(typeof(MainPage));
            }
            catch (Exception ex)
            {
                MessageBoxHelper.DisplayErrorWithReportAsync(ex).ConfigureAwait(false);
            }
        }

Klasa App

        public static LanguageChange ChangeLanguage;
        /// <summary>
        /// Inicjuje pojedynczy obiekt aplikacji. Jest to pierwszy wiersz napisanego kodu
        /// wykonywanego i jest logicznym odpowiednikiem metod main() lub WinMain().
        /// </summary>
        public App()
        {
            this.InitializeComponent();
            this.Suspending += OnSuspending;

            ChangeLanguage = new LanguageChange();
            ChangeLanguage.LanguageChanged += OnLanguageChange;
        }
        private void OnLanguageChange(object sender, EventArgs e)
        {
            LanguageChangeArgs languageChangeArgs = e as LanguageChangeArgs;

            ApplicationLanguages.PrimaryLanguageOverride = languageChangeArgs.LanguageCode;
        }

W tej ostatniej wrzuciłem InitializeComponent i nic. Pokombinuję jeszcze, ale wygląda na to, że szybciej będzie związać nowe zmienne językowe pod te kontrolki i po kłopocie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1