我已经创建了一个自定义弹出窗口,用动画工具提示来装饰我的按钮。我跟踪按钮的Button.MouseEnter以决定何时显示弹出窗口。我使用Button.MouseLeave来确定何时隐藏弹出窗口。
问题是,如果弹出式窗口移动到鼠标光标上(它的外观是动画的),Button.MouseLeave就会过早地触发,尽管我已经为弹出式窗口及其所有可视子窗口设置了IsHitTestVisible = false。
这就是WPF的工作方式吗?我需要MouseLeave只有当光标从按钮本身移开时才会触发,并且不受弹出窗口的影响。
谢谢
发布于 2012-05-14 23:18:02
我相信Popup控件实际上包含在一个窗口中,这就是为什么popup在某些情况下可以扩展到超出窗口边界的原因。(这也是为什么Silverlight不支持弹出窗口透明度的原因。)
我相信,虽然弹出窗口控件不再处理“点击”,但容器窗口是,这就是为什么你会失去你的按钮的鼠标焦点。
我还没有测试过这一点,但是您可以尝试为您的按钮创建一个模板,并实际将弹出窗口声明为按钮的一部分(而不是在其下方)。这可能会导致WPF将弹出窗口控件视为按钮的一部分,并消除失去鼠标焦点的问题。这在其他场景下也有效,但我不能100%确定弹出窗口如何工作。
编辑:作为附注,默认的WPF工具提示允许您覆盖模板。我不确定您的目标是什么,但您可能会发现更改默认工具提示的外观和行为比尝试滚动您自己的工具提示更容易,因为许多此类问题已经在默认工具提示中得到了解决。
https://stackoverflow.com/questions/10555470
复制相似问题