【问题标题】:WPF start focusing Editable ComboboxWPF 开始关注可编辑组合框
【发布时间】:2020-01-21 10:52:37
【问题描述】:

在 wpf 中,我有一个组合框 IsEditable=true。在我的窗口中,我通过FocusManager.FocusedElement="{Binding ElementName=myComboBox}" 将焦点设置到该组合框,但组合框根本没有聚焦。我可以检查并查看它的 IsFocused 属性是否为 true,但它没有进入编辑模式。

使用相同的代码,如果我用文本框替换组合框,文本框将获得焦点并正常切换到编辑模式。如何在可编辑组合框上实现相同的行为?

【问题讨论】:

    标签: c# wpf combobox


    【解决方案1】:

    我找到了解决办法。组合框获得了焦点,但问题是即使它处于可编辑模式,它也无法将焦点发送到文本框。为此,我创建了一个从 Combobox 继承的自定义 Combobox 控件,并覆盖 OnApplyTemplate 方法以将焦点放在组合框内的文本框上。在下面的示例中,我还添加了 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,因为刚开始聚焦时,模板尚未应用,因此我们可能无法获取文本框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多