题
我试图通过使用最顶层的透明非模式窗口来捕获 WPF 中的鼠标事件。我发现如果窗口的不透明度为 0.01 或更大并且它具有背景颜色,则效果很好,但是当不透明度设置为 0 时,它不再接收鼠标消息。有没有办法让这个窗口看起来完全透明并仍然获得鼠标输入?
解决方案
据我所知,没有。
当一个Control
或Window
是完全透明的,它随后可以通过点击。这样的话,如果你设置你的Window.Background="Transparent"
,或Opacity="0"
。据我所知,这是通过在WPF设计。
当使用的0.01的不透明度,则应该几乎看不到的窗口中,如果在所有。这可能是在实现功能你最好的选择。
修改强>另一种解决方案,这是我尝试和不工作,是将背景颜色设置为一个几乎透明的颜色。我用Background="#01000000"
,由此得到的1的α值。这使你的窗口的背景透明外观,但可以放置控件上它与完全不透明的窗口。
其他提示
在 Visual Studio 2010 中:在设计视图中选择您的窗口。
将窗口的属性设置为:
- 允许透明度:核实
- 背景 :透明的
- 窗口样式:没有任何
只需设置背景= Brushes.Transparent代替背景=空。
您并不需要在所有使用透明度(即只要把它以100%的不透明度)。
例如,我认为你的控件名称是MyGrid
,你希望它被Transparent
,一定可以得到的 MouseOverEvent
.....
如果强>(窗口AllowsTransparency
是True
和强>窗口Background
是Transparent
)的然后强>
使用强>像颜色的
#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
当一个对象捕获鼠标,所有的鼠标相关的事件被视为如果与鼠标捕获对象执行的情况下,即使鼠标指针位于另一对象。