locked
BCP-47 RRS feed

  • Вопрос

  •  Всем ПРИВЕТ!

    Помогите, пожалуйста!!!

    Программа помещает в ComboBox Имя языка преобразованное из кодировки BCP-47. Нужно сделать чтобы ComboBox при выборе выдавал не Имя, а именно его кодировку BCP-47. То есть преобразовать обратно. Заранее, Спасибо!!!

    Вот код

    foreach (var item in ApplicationLanguages.ManifestLanguages)
                {
                    var language = new Windows.Globalization.Language(item);
                    comboBox1.Items.Add(language.NativeName.ToString());
                }
    3 мая 2013 г. 14:07

Ответы

  • ВСЕМ ОГРОМНОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!!

    Вот такая конструкция получилась, думаю всем пригодится! Языки берутся из манифеста, так лучше.

    public sealed partial class SettingsPage : Page

    { private List<ComboBoxValue> comboBoxValues; private async void Page_Loaded_1(object sender, RoutedEventArgs e) { comboBoxValues = new List<ComboBoxValue>(); comboBoxValues.Add(new ComboBoxValue() { NativeName = "Предпочитаемый язык (рекомендуется)", LanguageTag = "" }); if (ApplicationLanguages.PrimaryLanguageOverride != "" || ApplicationLanguages.ManifestLanguages.Count > 1) { for (var i = 0; i < ApplicationLanguages.ManifestLanguages.Count; i++) { AddLanguage(new Windows.Globalization.Language(ApplicationLanguages.ManifestLanguages[i])); } } comboBox1.ItemsSource = comboBoxValues; comboBox1.SelectedIndex = comboBoxValues.FindIndex(FindCurrent); } private void AddLanguage(Language lang) { comboBoxValues.Add(new ComboBoxValue() { NativeName = lang.NativeName.ToString(), LanguageTag = lang.LanguageTag.ToString() }); } private static bool FindCurrent(ComboBoxValue value) { if (value.LanguageTag == Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride) { return true; } return false; } public class ComboBoxValue { public string NativeName { get; set; } public string LanguageTag { get; set; } } }

    В XAML коде вот так:

    <ComboBox x:Name="comboBox1" SelectionChanged="comboBox1_SelectionChanged" VerticalAlignment="Top" SelectedValuePath="LanguageTag" DisplayMemberPath="NativeName"/>

     

     


    • Помечено в качестве ответа SKYSPARK CORP 4 мая 2013 г. 3:27
    • Изменено SKYSPARK CORP 4 мая 2013 г. 3:28
    4 мая 2013 г. 3:24

Все ответы

  • Если я правильно понял ваш вопрос, то вы можете сохранить объект Language в свойство Tag:

        foreach (var item in ApplicationLanguages.ManifestLanguages)
        {
            var language = new Language(item);
            comboBox1.Items.Add(new ComboBoxItem {Content = language.NativeName, Tag = language});
        }
    

    И затем получить его так:

        private void ComboBoxOnSelectionChanged(object sender, SelectionChangedEventArgs selectionChangedEventArgs)
        {
            if(selectionChangedEventArgs.AddedItems.Count > 0)
            {
                var comboBoxItem = selectionChangedEventArgs.AddedItems[0] as ComboBoxItem;
                if (comboBoxItem != null)
                {
                    var language = comboBoxItem.Tag as Language;
                }
            }
        }
    3 мая 2013 г. 21:29
  • ВСЕМ ОГРОМНОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!!

    Вот такая конструкция получилась, думаю всем пригодится! Языки берутся из манифеста, так лучше.

    public sealed partial class SettingsPage : Page

    { private List<ComboBoxValue> comboBoxValues; private async void Page_Loaded_1(object sender, RoutedEventArgs e) { comboBoxValues = new List<ComboBoxValue>(); comboBoxValues.Add(new ComboBoxValue() { NativeName = "Предпочитаемый язык (рекомендуется)", LanguageTag = "" }); if (ApplicationLanguages.PrimaryLanguageOverride != "" || ApplicationLanguages.ManifestLanguages.Count > 1) { for (var i = 0; i < ApplicationLanguages.ManifestLanguages.Count; i++) { AddLanguage(new Windows.Globalization.Language(ApplicationLanguages.ManifestLanguages[i])); } } comboBox1.ItemsSource = comboBoxValues; comboBox1.SelectedIndex = comboBoxValues.FindIndex(FindCurrent); } private void AddLanguage(Language lang) { comboBoxValues.Add(new ComboBoxValue() { NativeName = lang.NativeName.ToString(), LanguageTag = lang.LanguageTag.ToString() }); } private static bool FindCurrent(ComboBoxValue value) { if (value.LanguageTag == Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride) { return true; } return false; } public class ComboBoxValue { public string NativeName { get; set; } public string LanguageTag { get; set; } } }

    В XAML коде вот так:

    <ComboBox x:Name="comboBox1" SelectionChanged="comboBox1_SelectionChanged" VerticalAlignment="Top" SelectedValuePath="LanguageTag" DisplayMemberPath="NativeName"/>

     

     


    • Помечено в качестве ответа SKYSPARK CORP 4 мая 2013 г. 3:27
    • Изменено SKYSPARK CORP 4 мая 2013 г. 3:28
    4 мая 2013 г. 3:24
  • Если я правильно понял ваш вопрос, то вы можете сохранить объект Language в свойство Tag:

        foreach (var item in ApplicationLanguages.ManifestLanguages)
        {
            var language = new Language(item);
            comboBox1.Items.Add(new ComboBoxItem {Content = language.NativeName, Tag = language});
        }

    И затем получить его так:

        private void ComboBoxOnSelectionChanged(object sender, SelectionChangedEventArgs selectionChangedEventArgs)
        {
            if(selectionChangedEventArgs.AddedItems.Count > 0)
            {
                var comboBoxItem = selectionChangedEventArgs.AddedItems[0] as ComboBoxItem;
                if (comboBoxItem != null)
                {
                    var language = comboBoxItem.Tag as Language;
                }
            }
        }

    Кирилл, спасибо! Ваш путь был верным.
    4 мая 2013 г. 3:30