2014-08-28 53 views
0

我無法更改我的應用程序的語言。當用戶更改組合框中的選定項目時,應該更改該語言。本地化問題 - Windows 8.1應用程序

這裏是我的代碼部分的一個片段:

protected override void OnLaunched(LaunchActivatedEventArgs args) 
    {   
     ResourceContext.GetForCurrentView().QualifierValues.MapChanged += QualifierValues_MapChanged; 

    } 

private void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event) 
    { 
     ResourceContext.ResetGlobalQualifierValues(); 
    } 

組合框代碼:

private void cbLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (e.AddedItems.Count > 0 && !String.IsNullOrEmpty(((ComboBoxItem)e.AddedItems[0]).Tag as string)) 
     { 
      LocalizationManager.UICulture = new System.Globalization.CultureInfo((string)((ComboBoxItem)e.AddedItems[0]).Tag); 
      Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = LocalizationManager.UICulture.Name; 
      int index = 0; 
      if (cbLanguage.SelectedIndex == 0 || cbLanguage.SelectedIndex < 0) 
      { 
       index = cbLanguage.Items.Count - 1; 
      } 
      else 
      { 
       index = cbLanguage.SelectedIndex - 1; 
      } 

      Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = (string)((ComboBoxItem)cbLanguage.Items[index]).Tag as String; 
      Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ((ComboBoxItem)e.AddedItems[0]).Tag as String; 

      if (languageChange != null) 
      { 
       languageChange(sender, new EventArgs()); 
      } 
     } 
     else 
     { 
      LocalizationManager.UICulture = System.Globalization.CultureInfo.CurrentUICulture; 
     } 
    } 

這將返回訪問衝突錯誤。

你能否幫我解決問題,讓應用程序正確地更改語言?

+0

我試過運行這段代碼,但函數'MapChanged'沒有被調用。你可以分享組合框的代碼嗎?也許這會幫助我重現你的問題。 – 2014-08-29 13:13:39

+0

嗨@BryanStump, 我已更新與組合框代碼的帖子。謝謝你試圖幫助我。僅供參考,我用於Windows 8應用程序的代碼工作得非常好。當我將應用程序定位到Windows 8.1時發生這種情況。 – 2014-08-30 01:43:03

+0

我運行了代碼,無法重現錯誤。如果沒有Localation manager類,並且知道組合框項目上有哪些標籤,則可能會出現錯誤。 – 2014-08-30 16:22:31

回答

0

該代碼設置Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride三次。這是什麼原因?

設置主要語言後,爲什麼要更改索引並重新設置語言?

if (cbLanguage.SelectedIndex == 0 || cbLanguage.SelectedIndex < 0) 
     { 
      index = cbLanguage.Items.Count - 1; 
     } 
     else 
     { 
      index = cbLanguage.SelectedIndex - 1; 
     } 
相關問題