2

当 WPF 组合框被单击并获得焦点时,之后发生的唯一交互可能是与组合框。如果与其他任何东西交互,包括窗口函数 ( minimize, restore, close, resize) 和窗口中的任何控件,则忽略该操作并且 ComboBox 失去焦点。

此外,MouseEnter窗口MouseLeave上的按钮仍然处于活动状态,但是当MouseEnter出现在窗口边框(?)上时,鼠标指针不会变为调整大小指针。这种行为是有意义的,因为ComboBox' 使用了弹出控件。弹出控件独立于主视觉树而存在,如果窗口移动或调整大小,弹出窗口保持固定浮动在主窗口上方。

我曾尝试使用Reflector来查看ComboBox它在做什么,但我无法找到我想要的东西。基本上,我不知道这种行为是来自窗口、组合框,还是与弹出窗口有关。我怎么解决这个问题?

4

2 回答 2

1

你的描述是对的,弹出窗口保持所有动作焦点,直到它本身失去焦点。如果您尝试更改 ComboBox 的功能,您可能需要考虑创建自己的 ControlTemplate,它的行为不同并且不保留弹出控件的默认操作。

希望这会有所帮助,但不完全确定您要做什么。

于 2009-05-26T20:50:27.343 回答
0

我知道这个问题很老,但对于任何来这里寻找答案的人来说,它是使用Mouse.Capture

组合框设置Mouse.Capture(comboBox, CaptureMode.SubTree)OnIsDropDownOpenChanged. 这可确保所有鼠标事件都被 ComboBox 捕获。当弹出窗口关闭时,Mouse.Capture(null)释放鼠标捕获。

于 2021-03-17T08:34:07.590 回答