创建一个完全透明的WPF窗口来捕获鼠标事件

时间:2009-10-29 20:30:44

标签: wpf mouse transparency

我正在尝试使用最顶层的透明非模态窗口在WPF中捕获鼠标事件。我发现如果窗口的不透明度为0.01或更高并且它具有背景颜色,这可以正常工作,但是当不透明度设置为0时,它不再接收鼠标消息。有没有办法让这个窗口看起来完全透明,仍然可以输入鼠标?

6 个答案:

答案 0 :(得分:29)

据我所知,没有。

ControlWindow完全透明时,可以点击它。如果您设置Window.Background="Transparent"Opacity="0",就会出现这种情况。据我所知,这是WPF设计的。

当使用0.01的不透明度时,你几乎看不到窗口,如果有的话。这可能是您实现功能的最佳选择。

编辑:我尝试并且确实有效的另一种解决方案是将背景颜色设置为几乎透明的颜色。我使用了Background="#01000000",因此给出的alpha值为1.这会使您的窗口背景看起来透明,但允许您在窗口处于完全不透明度的情况下对其进行控制。

答案 1 :(得分:12)

在Visual Studio 2010中: 在设计视图中选择您的窗口。

将窗口的属性设置为:

  • 允许透明度:检查
  • 背景:透明
  • WindowStyle:无

答案 2 :(得分:3)

只需设置Background = Brushes.Transparent而不是Background = null。

您根本不需要使用不透明度(即只留下100%不透明度)。

答案 3 :(得分:1)

例如,我认为您的控件名称为MyGrid,您希望它为Transparent并始终获得 MouseOverEvent .....

如果(窗口AllowsTransparencyTrue ,则Background窗口为Transparent然后

  对于#01777777 MyGrid {{

使用类似 Background 的颜色1 {} 代表0.01 MyGrid

其他

  对于Opacity #00777777 {{1

使用类似 MyGrid 的内容} {/ strong> Background 0.00

答案 4 :(得分:0)

将不透明度设置为100%(或任何非零值),并将背景设置为Transparent(而不是null)应该使大多数控件都可以打印。

确保将IsHitTestVisible设置为true。即使不透明度为100%且背景是透明的,也不会命中所有控件。

答案 5 :(得分:0)

您可能会发现使用Mouse.Capture更简单。

https://msdn.microsoft.com/en-us/library/ms771301.aspx

  

当一个对象捕获鼠标时,所有与鼠标相关的事件都会被视为具有鼠标捕获的对象执行该事件,即使鼠标指针位于另一个对象上也是如此。