3

我创建了一个自定义弹出窗口,用动画工具提示装饰我的按钮。我跟踪按钮的 Button.MouseEnter 以决定何时显示弹出窗口。我使用 Button.MouseLeave 来确定何时隐藏弹出窗口。

问题是 Button.MouseLeave 过早触发如果弹出窗口移动到鼠标光标上(它的外观是动画的),尽管我已经为弹出窗口及其所有可视子项设置了 IsHitTestVisible = false 。

这是 WPF 设计的工作方式吗?我需要 MouseLeave 仅在光标离开按钮本身并且不受弹出窗口影响时触发。

谢谢

4

1 回答 1

5

我相信 Popup 控件实际上包含在一个窗口中,这就是为什么在某些情况下弹出窗口可以超出窗口边界的原因。(这也是 Silverlight 不支持弹出透明度的原因。)

我相信,虽然弹出控件不再处理“点击”,但容器窗口是,这就是为什么你失去了按钮的鼠标焦点。

我没有对此进行测试,但您可以尝试为您的按钮创建一个模板并实际将弹出窗口声明为按钮的一部分(而不是在其下方)。这可能会导致 WPF 将弹出控件视为按钮的一部分,并消除失去鼠标焦点的问题。这适用于其他场景,但我不能 100% 确定这将如何与 Popup 一起使用。

编辑:作为旁注,默认 WPF 工具提示允许您覆盖模板。我不确定您的目标是什么,但您可能会发现更改默认工具提示的外观和行为比尝试自己动手更容易,因为默认工具提示中已经解决了很多此类问题.

于 2012-05-14T15:18:01.637 回答