WPF ComboBox:通过单击鼠标隐藏下拉菜单并聚焦其他控件
WPF ComboBox: hide drop-down and focus other control in single mouse click
通常,当 ComboBox 打开下拉菜单时,我需要单击两次鼠标才能将焦点移至其他控件。第一次单击将关闭下拉菜单,第二次单击将聚焦到其他控件。我需要一种只需单击鼠标即可将焦点放在其他控件上的方法。知道如何在 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;
}
这是基于提供的解决方案 here
通常,当 ComboBox 打开下拉菜单时,我需要单击两次鼠标才能将焦点移至其他控件。第一次单击将关闭下拉菜单,第二次单击将聚焦到其他控件。我需要一种只需单击鼠标即可将焦点放在其他控件上的方法。知道如何在 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;
}
这是基于提供的解决方案 here