C # WPF - ComboBox - PullRequest
       26

C # WPF - ComboBox

3 голосов
/ 06 января 2011

Я работаю над пользовательским элементом управления, который внутренне использует ComboBox.

Моя проблема в том, что когда ComboBox сфокусирован и имеет раскрывающийся список, кажется, что он фокусирует весь элемент управления.Я хотел бы автоматически выделить первый элемент в раскрывающемся списке, но сейчас вам нужно нажать клавишу «Вниз», чтобы сделать это.

Есть ли способ программно выделить первый элемент в поле со списком (установитетолько для чтения IsHighlighted свойство true)?Я считаю, что концепция IsHighlight внутри ComboBox отличается от Focus.Кроме того, я связываюсь через ItemsSource, поэтому у меня нет ссылок на ComboBoxItems.

Ответы [ 2 ]

3 голосов
/ 07 января 2011

Вот способ сделать это, хотя он может не охватывать все случаи - но вы не предоставили слишком много деталей (например, что происходит, когда уже выбран элемент? Вы все еще хотите выбрать первый элемент в списке? Приведенный ниже код будет выделять первый элемент только в том случае, если в выпадающем списке нет выделения. Чтобы всегда выделять первый элемент, событие DropDownOpened также должно обрабатываться).

public MainWindow()
{
    InitializeComponent();
    combobox.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged);
}

void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
    if (combobox.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
    {
        (combobox.ItemContainerGenerator.ContainerFromIndex(0) as ComboBoxItem).Focus();
    }
}

(Надеюсь, я правильно понял, и это то, что вы хотите сделать).

0 голосов
/ 06 января 2011

Возможно, это не то, что вы ищете, но если вы установите mycombo.SelectedIndex = 0, то mycombo.IsDropDownOpen = True должно открыть его и выбрать первый элемент.Это будет выделено, но также будет значением в выпадающем списке.Я не уверен, если это не желаемый эффект, хотя ..

...