我正在尝试使用最顶层的透明非模态窗口在WPF中捕获鼠标事件。我发现如果窗口的不透明度为0.01或更高并且它具有背景颜色,这可以正常工作,但是当不透明度设置为0时,它不再接收鼠标消息。有没有办法让这个窗口看起来完全透明,仍然可以输入鼠标?
答案 0 :(得分:29)
据我所知,没有。
当Control
或Window
完全透明时,可以点击它。如果您设置Window.Background="Transparent"
或Opacity="0"
,就会出现这种情况。据我所知,这是WPF设计的。
当使用0.01的不透明度时,你几乎看不到窗口,如果有的话。这可能是您实现功能的最佳选择。
编辑:我尝试并且确实有效的另一种解决方案是将背景颜色设置为几乎透明的颜色。我使用了Background="#01000000"
,因此给出的alpha值为1.这会使您的窗口背景看起来透明,但允许您在窗口处于完全不透明度的情况下对其进行控制。
答案 1 :(得分:12)
在Visual Studio 2010中: 在设计视图中选择您的窗口。
将窗口的属性设置为:
答案 2 :(得分:3)
只需设置Background = Brushes.Transparent而不是Background = null。
您根本不需要使用不透明度(即只留下100%不透明度)。
答案 3 :(得分:1)
例如,我认为您的控件名称为MyGrid
,您希望它为Transparent
并始终获得 MouseOverEvent
.....
如果(窗口AllowsTransparency
为True
且,则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
当一个对象捕获鼠标时,所有与鼠标相关的事件都会被视为具有鼠标捕获的对象执行该事件,即使鼠标指针位于另一个对象上也是如此。