组合框聚焦时的WPF鼠标行为

组合框聚焦时的WPF鼠标行为,wpf,combobox,behavior,Wpf,Combobox,Behavior,当WPF组合框被单击并处于焦点时,在此之后发生的唯一交互可以是与组合框的交互。如果与任何其他功能交互,包括窗口功能(最小化,还原,关闭,调整大小)和窗口中的任何控件,则该操作将被忽略,组合框将失去焦点 此外,窗口按钮上的MouseEnter和MouseLeave仍处于活动状态,但当窗口边框(?)上出现MouseEnter时,鼠标指针不会变为调整大小指针。这种行为之所以有意义,是因为组合框使用了弹出控件。弹出控件独立于主视觉树而存在,如果窗口移动或调整大小,则弹出控件在主窗口上方保持固定浮动 我曾

当WPF组合框被单击并处于焦点时,在此之后发生的唯一交互可以是与组合框的交互。如果与任何其他功能交互,包括窗口功能(
最小化
还原
关闭
调整大小
)和窗口中的任何控件,则该操作将被忽略,组合框将失去焦点

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


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

你的描述是对的,弹出窗口会保持所有动作的焦点,直到它自己失去焦点。如果您试图更改ComboBox的功能,您可能希望看到它的行为不同,并且不保留弹出控件的默认操作


希望这对你有所帮助,不要完全确定你想做什么。

我知道这个问题很老了,但对于任何来这里寻找答案的人来说,这是一个有用的问题


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

我不是在尝试更改组合框的功能,而是在尝试创建一个完全不同的控件,其结构类似于组合框控件模板,只是没有切换按钮。如果您查看组合框,您可以看到当弹出窗口打开时,任何鼠标事件似乎都会通过。它甚至忽略了将鼠标悬停在窗口边框上的调整大小指针通常会显示的位置。我知道他们这样做是为了在窗口更改时弹出窗口不能保持打开状态。我只是想弄清楚如何实现类似的行为。在这种情况下,我可能会放弃ComboBox的下拉式设计,只创建一个在切换时显示内容的控件。然后,您可以将其设置为在鼠标焦点丢失时关闭内容面板。您必须复制组合框本身的功能,但可能只有这样做才能实现您想要的行为。