【问题标题】:WPF ComboBox: hide drop-down and focus other control in single mouse clickWPF ComboBox:在单击鼠标时隐藏下拉菜单并聚焦其他控件
【发布时间】:2015-01-08 08:44:26
【问题描述】:

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

【问题讨论】:

  • 你已经尝试了什么?
  • 我试图覆盖 OnMouseDown。我没有其他想法。

标签: c# wpf combobox


【解决方案1】:

您可以像这样处理组合框控件的 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;
    }

这是基于here提供的解决方案

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 2018-10-13
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2012-04-20
    • 2015-10-11
    • 2017-07-29
    • 2017-06-30
    相关资源
    最近更新 更多