3

当我不设置面板的背景时,我无法获得鼠标事件。为什么会有这种行为?我可以通过将背景设置为默认为空的透明来获取面板上的鼠标事件。背景空和透明有什么区别?

4

1 回答 1

7

渲染时Background=null不向MILCore发出任何绘图命令,并且在命中测试中不计算控件的整个区域。

当 时Background=Transparent,它在渲染时向 MILCore 发出一个普通的绘图命令,并在命中测试时控制整个区域。

Brushes.Transparent真的是一个普通的画笔,它的 alpha(不透明度)通道设置为零。正因为如此,它在大多数情况下就像一种普通的颜色。如果背景是普通颜色,则会检测到鼠标点击,因此也会检测到Brushes.Transparent.

也就是说,有一些地方代码会检测到 Brushes.Transparent 并通过完全省略绘图命令来优化它。例如,窗口透明度与操作系统的交互会发生这种情况:操作系统不会被告知任何绘制的区域Brushes.Transparent都是应用程序的一部分,因此单击它不会执行任何操作。Brushes.Transparent为此目的,这是通过特殊外壳完成的。

于 2009-11-12T07:37:00.593 回答