Эквивалент WinForms ComboBox.DroppedDown в WPF - PullRequest
1 голос
/ 08 сентября 2010

У меня есть простой пример кода WinForms, который я пытаюсь перевести в WPF. Идея состоит в том, чтобы изменить элементы внутри ComboBox, если выбран определенный элемент, и снова выпустить ComboBox, если это произошло. Код WinForms:

 if (list.Text.Equals("C>>"))
        {
            comboBox1.Items.Clear();

            comboBox1.Items.Add("<<");
            comboBox1.Items.Add("C1");
            comboBox1.Items.Add("C2");
            comboBox1.Items.Add("C3");
            comboBox1.Items.Add("C4");
            comboBox1.Items.Add("C5");
            comboBox1.Items.Add("C6");
            comboBox1.DroppedDown = true;
        }

Хотя я подумал, что это было бы довольно простым изменением, используя

    private void hotListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (hotListBox.SelectedItem != null)
        {
            if (hotListBox.SelectedItem.Equals("b >>"))
            {
                hotListBox.ItemsSource = secondList;
                hotListBox.IsDropDownOpen = true;
            }
            else if (hotListBox.SelectedItem.Equals("<<"))
            {
                hotListBox.ItemsSource = initialList;
                hotListBox.IsDropDownOpen = true;

            }
            else if (hotListBox.SelectedItem.Equals("d >>"))
            {
                hotListBox.ItemsSource = thirdList;
                hotListBox.IsDropDownOpen = true;

            }
        }
    }

в WPF, похоже, не работает так же. Мне было интересно, если кто-нибудь знает, как это сделать?

Как отмечено в комментариях, я должен сказать, что элементы в ComboBox обновляются, как и ожидалось, но в коде WPF он не выпадает снова.

Приветствия

РЕДАКТИРОВАТЬ: обновленный код

Ответы [ 2 ]

3 голосов
/ 08 сентября 2010

Изменить это:

hotListBox.IsDropDownOpen = true;

к этому:

Application.Current.Dispatcher.BeginInvoke(new Action(delegate
{
     hotListBox.IsDropDownOpen = true;
}));
0 голосов
/ 08 сентября 2010

Вероятно, проще просто изменить источник элементов в выпадающем списке при изменении выбора списка.

Так что создайте пару списков

   List<string> list1 = new List<string>() { "<<", "C1", "C2", "C3", "C4", "C5", "C6" };
   List<string> list2 = new List<string>() { "<<", "f", "g", "h", "i" };

, а затем просто измените источник элемента в выпадающем списке навыбор списка изменился (используя любую логику, которая вам нужна)

private void _lbTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (_lbTest.SelectedIndex == 0)
        _comboTest.ItemsSource = list1;
    else
        _comboTest.ItemsSource = list2;

    _comboTest.IsDropDownOpen = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...