C#Windows Phone 8.1语言选择
我希望以前没有问过,我在MSDN或这里找不到简单的解决方案。
windows phone 8.1应用程序以多种语言部署。 为此,我在Strings\en-US\Ressources.resw
使用默认语言(英语),并安装了Multilingual App Toolkit ,并在那里添加了所有其他语言。
要更改语言,我有以下代码:
private void changeLang(string cul) { Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = cul; Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset(); Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset(); if (Frame != null) Frame.Navigate(typeof(MainPage)); }
可以被称为
changeLang("en-US");
之后我必须重新启动应用程序(如果没有重新启动它就无法工作)。
问题是我的实施。 我创建了一个名为Settings
的页面,我希望为用户提供更改语言的可能性。
现在我想为用户提供一个ComboBox
其中包含我翻译的所有语言。 默认情况下,选定的ComboBoxItem
应显示应用程序的当前语言(而不是Systems语言,因为用户可能已经更改了语言)。
这是我对问题的解决方案,我希望这对其他人也有用。
首先我们创建一个新struct
:
public class ComboboxItem { public string Text { get; set; } public object Value { get; set; } public override string ToString() { return Text; } }
然后在Form上的OnNavigate
部分添加以下代码:
settings_language_cb.Items.Add(new ComboboxItem { Text = "Deutsch", Value = "de-DE" }); settings_language_cb.Items.Add(new ComboboxItem { Text = "English", Value = "en-US" }); var curLangItem = settings_language_cb.Items.SingleOrDefault(x => (x as ComboboxItem).Value.ToString() == CultureInfo.CurrentCulture.Name); settings_language_cb.SelectedItem = curLangItem; settings_language_cb.PlaceholderText = (curLangItem as ComboboxItem).Text;
就这样。
你可以尝试这样的事情
class LanguageCode { string Name { get; set; }, string CodeName { get; set; } } var langs = new List(); langs.Add(new LanguageCode() { Name = "English", CodeName = "en-US" }); langs.Add(new LanguageCode() { Name = "Deutsch", CodeName = "de-DE" }); // ... and so on ... settings_language_cb.Items.Add(langs); settings_language_cb.SelectedIndex = 0;
在ComboBox上,将代码更改为:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var si = settings_language_cb.SelectedItem as LanguageCode; if(si != null) changeLang(si.CodeName); // changeLang("de-DE"); }
@MrEko
获取所选项目很容易。
首先,您必须在XAML
Combobox中创建SelectionChanged
事件,然后您将获得所选项目,如下所示:
(myXAMLComboBox.SelectedItem as ComboboxItem).Value.ToString();
在这里整个事情在行动。 (请注意,当我更改语言时, changeLang
是我保存的常量,而changeLang
是更改语言的函数)。 原因是,在更改语言后,您必须重新启动应用程序,以使其生效。
private void Page_Settings_LanguageComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (oldLang != (PageSettings_Language_cb.SelectedItem as ComboboxItem).Value.ToString()) { try { changeLang((PageSettings_Language_cb.SelectedItem as ComboboxItem).Value.ToString()); ShowRestartMessageBox(); } catch (Exception) { } } }