我试图通过使用最顶层的透明非模式窗口来捕获 WPF 中的鼠标事件。我发现如果窗口的不透明度为 0.01 或更大并且它具有背景颜色,则效果很好,但是当不透明度设置为 0 时,它不再接收鼠标消息。有没有办法让这个窗口看起来完全透明并仍然获得鼠标输入?

有帮助吗?

解决方案

据我所知,没有。

当一个ControlWindow是完全透明的,它随后可以通过点击。这样的话,如果你设置你的Window.Background="Transparent",或Opacity="0"。据我所知,这是通过在WPF设计。

当使用的0.01的不透明度,则应该几乎看不到的窗口中,如果在所有。这可能是在实现功能你最好的选择。

修改另一种解决方案,这是我尝试和不工作,是将背景颜色设置为一个几乎透明的颜色。我用Background="#01000000",由此得到的1的α值。这使你的窗口的背景透明外观,但可以放置控件上它与完全不透明的窗口。

其他提示

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

将窗口的属性设置为:

  • 允许透明度:核实
  • 背景 :透明的
  • 窗口样式:没有任何

只需设置背景= Brushes.Transparent代替背景=空。

您并不需要在所有使用透明度(即只要把它以100%的不透明度)。

例如,我认为你的控件名称是MyGrid,你希望它被Transparent,一定可以得到的 MouseOverEvent .....

如果(窗口AllowsTransparencyTrue 窗口BackgroundTransparent)的然后

  

使用像颜色的 #01777777 作为MyGrid Background 0.01 作为MyGrid Opacity

<强>否则

  

使用类似的 #00777777 作为MyGrid Background 0.00 作为MyGrid Opacity

设置不透明度为100%(或任何非零值),和背景为透明(而不是零)应使大多数控件hittable。

请务必设置 IsHitTestVisible 为true。不是所有的控件可以被击中,即使不透明度为100%,背景是透明的。

您可能会发现它更容易使用Mouse.Capture

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

  

当一个对象捕获鼠标,所有的鼠标相关的事件被视为如果与鼠标捕获对象执行的情况下,即使鼠标指针位于另一对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top