Wpf面板背景问题

3

当我不设置面板的背景时,无法在其上获取鼠标事件。为什么会出现这种情况? 如果将背景设置为透明(默认为null),则可以在面板上获取鼠标事件。 背景为null和透明之间有什么区别?

1个回答

7
Background=null时,在渲染时不会向MILCore发出任何绘图命令,并且在命中测试中不计算控件的整个区域。
Background=Transparent时,它会在渲染时发出普通的绘图命令,并且在命中测试中控制整个区域。 Brushes.Transparent实际上是一种普通的画刷,其alpha(透明度)通道设置为零。因此,在大多数情况下它表现得像一个普通的颜色。如果背景是一种普通的颜色,则会检测到鼠标点击事件,因此对于Brushes.Transparent也会检测到。
话虽如此,有几个地方的代码会检测到Brushes.Transparent并通过完全省略绘图命令来进行优化。例如,这种情况在窗口透明度与操作系统的交互方面就会发生:操作系统不知道使用Brushes.Transparent绘制的任何区域都是应用程序的一部分,因此单击它不起作用。这是通过为此目的特别处理Brushes.Transparent来完成的。

所有的渲染都在MILCore上执行吗? - viky
MILCore是微软WPF本地(非托管)部分的名称,它维护渲染数据,通过通道进行编组(用于远程情况),并调用Direct3D进行实际渲染。最准确地说,实际渲染是由您的显卡驱动程序和硬件完成的,如果显卡无法完成,则会回归到软件模式。显卡驱动程序可通过Direct3D定义的接口访问,WPF的非托管人格"MILCore"调用它。 - Ray Burns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接