WPF 组合框:隐藏下拉列表并通过单击鼠标聚焦其他控件

本文关键字:单击 鼠标 聚焦 控件 其他 组合 隐藏 下拉列表 WPF | 更新日期: 2023-09-27 18:36:46

通常,当 ComboBox 打开下拉列表时,我需要单击两次鼠标才能将焦点放在其他控件上。第一次单击将关闭下拉列表,第二次单击会将焦点放在其他控件上。我需要一种方法,只需单击一下鼠标即可将焦点放在其他控件上。知道如何在 WPF 中做到这一点吗?

WPF 组合框:隐藏下拉列表并通过单击鼠标聚焦其他控件

你可以像这样处理组合框控件的 DropDownClosed 事件:

private void comboBox_DropDownClosed(object sender, EventArgs e)
    {
        Point m = Mouse.GetPosition(this);
        VisualTreeHelper.HitTest(this, new HitTestFilterCallback(FilterCallback),
            new HitTestResultCallback(ResultCallback), new PointHitTestParameters(m));
    }
    private HitTestFilterBehavior FilterCallback(DependencyObject o)
    {
        var c = o as Control;
        if ((c != null) && !(o is MainWindow))
        {
            if (c.Focusable)
            {
                c.Focus();
                return HitTestFilterBehavior.Stop;
            }
        }
        return HitTestFilterBehavior.Continue;
    }
    private HitTestResultBehavior ResultCallback(HitTestResult r)
    {
        return HitTestResultBehavior.Continue;
    }

这是基于此处提供的解决方案