制作WPF窗口点击,而不是其控件

首先,我想通过对文本中的点击进行透明来定义我的意思:它意味着点击通过我的窗口而不进行任何处理,直接到下面的任何一个窗口。 我需要这种行为,因为这个应用程序是一个游戏覆盖。

我搜索了有关使窗口对点击透明的问题。 我想知道是否有办法让窗口本身对点击是透明的,而不是它的控件(如文本框和按钮)。

这是窗口的标记:

            

而bellow是使窗口对点击透明的代码(几乎从其他问题复制粘贴,因为我在低级Windows编程时并不擅长)。

 namespace Win32Utils { public static class WindowHelper { const int WS_EX_TRANSPARENT = 0x00000020; const int GWL_EXSTYLE = (-20); public static void SetWindowExTransparent(IntPtr hwnd) { var extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE); SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT); } } } 

方法WindowHelper.SetWindowExTransparent是从我的方法Window.OnSourceInitialized的覆盖中调用的(正如我从透明窗口获取代码的post中所指示的):

 protected override void OnSourceInitialized(EventArgs e) { base.OnSourceInitialized(e); var hwnd = new WindowInteropHelper(this).Handle; WindowHelper.SetWindowExTransparent(hwnd); } 

这确实使窗口对点击变得透明,但我放入的所有控件都是透明的(例如,TextBox)。 有没有办法使窗口表面对点击透明,但确保TextBox仍然正常接收鼠标和键盘输入?

出于用户隐私的原因,我想避免使用鼠标和键盘钩子,因为正如我所说,我对Windows API并不了解。 如果钩子是唯一的方法,我真的很感激“For Dummies”式的解释,说明它们是如何工作的。

你能试试吗?

           

它的基本function是创建一个透明的窗口。(点击和Invisble)。 但控件是可见的,而不是点击通过。 或者您可以尝试如何在WPF中创建一个允许鼠标事件通过的半透明窗口