gpt4 book ai didi

wpf - 即使重叠对象为 IsHitTestVisible = false,底层对象的 MouseLeave 也会被触发

转载 作者:行者123 更新时间:2023-12-04 20:50:05 26 4
gpt4 key购买 nike

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

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

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

谢谢

最佳答案

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

我相信虽然弹出控件不再处理“点击”,但容器窗口正在处理,这就是您失去按钮鼠标焦点的原因。

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

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

关于wpf - 即使重叠对象为 IsHitTestVisible = false,底层对象的 MouseLeave 也会被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com