Я нашел решение. Комбо-бокс получил фокус, но проблема в том, что он не может отправить фокус на текстовое поле, даже если он находится в режиме редактирования. Для этого я создаю пользовательский элемент управления 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, поскольку сначала при фокусировке шаблон еще не применяется поэтому мы не можем получить текстовое поле.