2009-11-12 78 views
3

当我不设置我的面板背景时,我无法获得鼠标事件。为什么这种行为? 默认情况下,我可以通过将透明背景设置为null来在面板上获取鼠标事件。 Background null和Transparent有什么区别?Wpf面板背景问题

回答

7

Background=null渲染时不会发出任何绘图命令MILCore,并且它不指望在命中测试控制的整个区域。

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

Brushes.Transparent实际上是一个普通的刷子与它的α(不透明度)的信道设置为零。正因为如此,在大多数情况下,它就像普通的颜色一样。如果背景是普通颜色,则会检测到鼠标点击,因此它们也会被检测到Brushes.Transparent

这就是说,存在代码检测Brushes.Transparent和完全省略绘图命令优化它带走了几个地方。例如,这发生在窗口透明与操作系统的交互中:操作系统没有被通知任何涂有Brushes.Transparent的区域是应用程序的一部分,因此单击它不会执行任何操作。这是通过特殊外壳Brushes.Transparent为此目的完成的。

+0

是否在MILCore上执行所有渲染? – viky 2009-11-12 09:07:07

+0

MILCore是微软的WPF本地(非托管)部分的名称,用于维护渲染数据,通过通道编组它(用于远程处理)并调用Direct3D执行实际渲染。最准确的说,它是你的显卡的驱动程序和硬件来完成实际的渲染,如果显卡无法实现它,则会回退到软件。视频卡的驱动程序通过Direct3D定义的接口访问,Direct3D由WPF的非托管角色“MILCore”调用。 – 2009-11-12 18:44:02

+0

感谢您的一切帮助 – viky 2009-11-13 04:36:08