WPF 开始关注 Editable Combobox
WPF start focusing Editable Combobox
在 wpf 中,我有一个 IsEditable=true
的组合框。在我的 window 中,我通过 FocusManager.FocusedElement="{Binding ElementName=myComboBox}"
将焦点设置到那个组合框,但组合框根本没有聚焦。我可以检查它的 IsFocused 属性 是否正确,但它不会进入编辑模式。
使用相同的代码,如果我用文本框替换组合框,文本框将获得焦点并正常进入编辑模式。如何在可编辑组合框上实现相同的行为?
我找到了解决办法。组合框获得了焦点,但问题是它无法将焦点发送到文本框,即使它处于可编辑模式。为此,我创建了一个自定义 Combobox 控件,它继承自 Combobox 并重写 OnApplyTemplate 方法以聚焦到组合框内的文本框。在下面的示例中,我还添加了 IsEditableFocusTextBox 属性,因此我可以稍后改变此行为 on/off。
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,因为一开始聚焦时,模板还没有应用,所以我们可能无法获取文本框。
在 wpf 中,我有一个 IsEditable=true
的组合框。在我的 window 中,我通过 FocusManager.FocusedElement="{Binding ElementName=myComboBox}"
将焦点设置到那个组合框,但组合框根本没有聚焦。我可以检查它的 IsFocused 属性 是否正确,但它不会进入编辑模式。
使用相同的代码,如果我用文本框替换组合框,文本框将获得焦点并正常进入编辑模式。如何在可编辑组合框上实现相同的行为?
我找到了解决办法。组合框获得了焦点,但问题是它无法将焦点发送到文本框,即使它处于可编辑模式。为此,我创建了一个自定义 Combobox 控件,它继承自 Combobox 并重写 OnApplyTemplate 方法以聚焦到组合框内的文本框。在下面的示例中,我还添加了 IsEditableFocusTextBox 属性,因此我可以稍后改变此行为 on/off。
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,因为一开始聚焦时,模板还没有应用,所以我们可能无法获取文本框。