WPF面板支持来自IInputElement接口的事件(大多数鼠标事件在这里声明)
在面板中执行MouseEnter或MouseMove时,只有当您将鼠标悬停在该面板上的childcpntrol而不是整个面板空间时才会执行该事件
示例:Stackpanel(Orientation = horizontal),带有文本块(WPF中的标签),文本框和按钮。按钮上有5的余量。 Stackpanel有一个MouseEnter和一个MouseLeave处理程序。当这些事件触发时,将在文本块和文本框中设置一些文本(例如:'Stackpanel enter'和'Stackpanel left')。文本块的文本将被更新,文本框文本将被添加。
如果从左到右(从文本块到按钮)转到堆叠面板,您将看到文本框中的文本如下: 'Stackpanel进入Stackpanel,离开Stackpanel进入'。
将触发MouseLeave事件。这是因为文本框和按钮之间的空白区域(如果你还记得按钮的边距)。
我的问题是:为了在相同的情况和条件下没有发送MouseLeave事件,必须在stackpanel上进行哪些更改?
换句话说:MouseEnter和MouseLeave事件如何在Stackpanel本身而不是他的孩子上链接,以便stackpanel的所有空间都是“事件区域”?
答案 0 :(得分:3)
看起来答案与backgorund颜色有关。 Presentation Core假定空白区域属于Stackpanel的父级(或其中一个父级)。
良好的解决方案:覆盖默认背景或设置背景。这是“透明”(RGB:0 255 255 255,十六进制:#00FFFFFF)。值必须不太透明(RGB:1 255 255 255,十六进制:#01FFFFFF)。