1

WPF 面板支持来自 IInputElement 接口的事件(大多数鼠标事件都在这里声明)

在面板中执行 MouseEnter 或 MouseMove 时,它​​只会在您将鼠标悬停在该面板中的 childcpntrol 而不是整个面板空间上时执行该事件

示例:带有文本块(WPF 中的标签)、文本框和按钮的 Stackpanel(方向 = 水平)。按钮上的边距为 5。Stackpanel 有一个 MouseEnter 和一个 MouseLeave 处理程序。当这些事件触发时,将在文本块和文本框中设置一些文本(例如:'Stackpanel enter'和'Stackpanel left')。文本块的文本将被更新,文本框文本将被添加。

如果您从左到右(从文本块到按钮)转到您的堆栈面板,您将看到文本框中的文本如下:“堆栈面板已输入堆栈面板左侧堆栈面板已输入”。

触发 MouseLeave 事件。这是因为文本框和按钮之间的空白(如果你记得的话,按钮的边距)。

我的问题是:为了在相同的情况和条件下不触发 MouseLeave 事件,必须在堆栈面板上进行哪些更改?

换句话说:如何将 MouseEnter 和 MouseLeave 事件链接到 Stackpanel 本身而不是他的孩子,以便 stackpanel 的所有空间都是“事件区域”?

4

1 回答 1

4

看起来答案与背景颜色有关。Presentation Core 假定空白属于 Stackpanel 的父级(或父级之一)。

好的解决方案:覆盖默认背景或设置背景。这是“透明”(RGB:0 255 255 255,十六进制:#00FFFFFF)。值必须不那么透明(RGB:1 255 255 255,十六进制:#01FFFFFF)。

于 2012-10-09T08:24:38.363 回答