当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《制作WPF窗口点击,而不是其控件》经验,为你挑选了1个好方法。

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

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

这是窗口的标记:


    
        
    
    
        
            
            
        
        
    

而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的覆盖范围内调用的(正如我在获得透明窗口代码的帖子中所指示的):

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

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

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



1> AEonAX..:

你能试试吗?


    
        
    
    
        

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


`Opacity ="0.05"`不起作用.但是`Opacity ="0"`的确如此.
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有