WPF начала фокусироваться на Editable Combobox - PullRequest
0 голосов
/ 21 января 2020

В wpf у меня есть выпадающий список, который IsEditable=true. В моем окне я установил фокус на этот комбинированный список с помощью FocusManager.FocusedElement="{Binding ElementName=myComboBox}", но комбинированный список не фокусируется вообще. Я могу проверить и убедиться, что это свойство IsFocused имеет значение true, но оно не переключается в режим редактирования.

С тем же кодом, если я заменю комбинированный список текстовым полем, текстовое поле получит фокус и повернется для редактирования. режим нормально. Как мне добиться такого же поведения в редактируемом комбинированном списке?

1 Ответ

0 голосов
/ 30 января 2020

Я нашел решение. Комбо-бокс получил фокус, но проблема в том, что он не может отправить фокус на текстовое поле, даже если он находится в режиме редактирования. Для этого я создаю пользовательский элемент управления Combobox, который наследуется от Combobox, и переопределяю метод OnApplyTemplate, чтобы сосредоточиться на текстовом поле внутри Combobox. В приведенном ниже примере я также добавил свойство IsEditableFocusTextBox, чтобы потом можно было включить или отключить это поведение.

class CustomCombobox : ComboBox
{
    internal bool IsEditableFocusTextBox { get; set; }
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        if (IsFocused && IsEditable && IsEditableFocusTextBox)
        {
            TextBox myControl = (TextBox)GetTemplateChild("PART_EditableTextBox");
            if (myControl != null)
            {
                myControl.Focus();
            }
        }
    }
}

Нам нужно переопределить OnApplyTemplate, но не OnGotFocus, поскольку сначала при фокусировке шаблон еще не применяется поэтому мы не можем получить текстовое поле.

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