我想向控件后面的应用程序发送鼠标点击。我有一个最上层的透明窗口和一些控件。我希望能够通过其中一些控件发送点击。
我已经尝试将IsHitTestVisible="False"属性设置为控件,但它不起作用。例如,它无法将点击发送到桌面。
我还尝试了这个问题中提出的解决方案:如何在WPF中创建一个半透明窗口,允许鼠标事件穿过。
它可以工作,但我想使某些控件透明,而不是整个窗口。
我该如何将该问题的解决方案应用于单个控件,例如椭圆形?
解决方案:
我已经尝试将IsHitTestVisible="False"属性设置为控件,但它不起作用。例如,它无法将点击发送到桌面。
我还尝试了这个问题中提出的解决方案:如何在WPF中创建一个半透明窗口,允许鼠标事件穿过。
它可以工作,但我想使某些控件透明,而不是整个窗口。
我该如何将该问题的解决方案应用于单个控件,例如椭圆形?
解决方案:
public static class WindowsServices
{
const int WS_EX_TRANSPARENT = 0x00000020;
const int GWL_EXSTYLE = (-20);
[DllImport("user32.dll")]
static extern int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);
public static void SetWindowExTransparent(IntPtr hwnd)
{
var extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
}
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
var hwnd = new WindowInteropHelper(this).Handle;
WindowsServices.SetWindowExTransparent(hwnd);
}