Странные проблемы с выпадающим списком Combobox - PullRequest
2 голосов
/ 01 октября 2011

Еще раз я не могу найти аккуратное решение для простой проблемы пользовательского интерфейса в WPF. Я хочу, чтобы раскрывающийся список поля со списком появлялся всякий раз, когда поле со списком фокусировалось. Итак, я написал это в событии получил фокус:

 private void comboBoxAC_Cat_GotFocus(object sender, RoutedEventArgs e)
    {
        comboBoxAC_Cat.IsDropDownOpen = true;
    }

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

private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        var uie = e.OriginalSource as UIElement;
        if (e.Source is Button)
            return;
        if (e.Key == Key.Enter)
        {
            e.Handled = true;
            uie.MoveFocus(
            new TraversalRequrest(
            FocusNavigationDiection.Next));
        }
    }
    private void comboBoxAC_Cat_LostFocus(object sender, RoutedEventArgs e)
    {
        (sender as ComboBox).IsDropDownOpen = false;

    }

Может кто-нибудь помочь мне с этим, пожалуйста?

Моё основное требование простое: раскрывающийся список должен открываться, как только Combobox фокусируется с помощью вкладки или мыши. Затем пользователь должен иметь возможность выбирать элементы, и, как только он нажимает клавишу ввода, выбирая элемент из выпадающего списка, он должен закрыться, и фокус должен перейти к следующему элементу пользовательского интерфейса.

Теперь это трудно достичь ??? Я думал, что это именно функциональность комбобокса

1 Ответ

2 голосов
/ 02 октября 2011

Я не понимаю, если я использую именно этот код ниже

    private bool returnedFocus = false;

    private void myComboBox_GotFocus(object sender, RoutedEventArgs e)
    {
        if (e.OriginalSource.GetType() != typeof(ComboBoxItem) && !returnedFocus)
        {
            cmb.IsDropDownOpen = true;
        }
    }

    private void myComboBox_LostFocus(object sender, RoutedEventArgs e)
    {
        if (e.OriginalSource.GetType() != typeof(ComboBoxItem))
        {
            ComboBox cb = (ComboBox)sender;
            returnedFocus = cb.IsDropDownOpen;
        }
    }

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

Разве это не то, что вы хотели?

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