• WPF透明置顶窗口wine适配穿透问题解决


    一、透明窗口全屏时,鼠标不穿透

    问题描述

    我有一个透明窗口,它是一个全屏置顶窗口,窗口里面有一个工具条,可以通过鼠标拖动工具条的位置,程序启动后,在不点击工具条的时候,鼠标是可以穿透的,当点击一次工具条后,在点击其余透明的地方,就不能穿透了

    问题原因分析

    通过排查,导致这个原因是窗口在初始化的时候设置了ResizeMode=“NoResize”,通过测试,设置为NoResize或者CanMinimize都存在问题

    解决办法

    办法1

    取消窗口的ResizeMode设置或者显示设置为:CanResize或者CanResizeWithGrip

    办法1遇到的问题

    鼠标穿透已经没有问题了 ,但是在拖动工具条或者鼠标从工具条上经过的时候,控件呈现显示缓慢或者抖动的问题,体验很不好,重新将ResizeMode还原,则没有这个问题

    办法2(正确办法)

    窗口在初始化的时候,不设置ResizeMode参数,在窗口的Loaded事件里面在设置ResizeMode:

        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                this.ResizeMode = ResizeMode.CanResize;
                this.Loaded+= OnLoaded;
            }
    
            private void OnLoaded(object sender, RoutedEventArgs e)
            {
                this.ResizeMode = ResizeMode.NoResize;
            }
        }
    

    通过这个方法设置后,既能解决鼠标穿透问题,也没有发现拖动问题。
    备注:
    WPF程序在其它一些设置也会导致初始化和Loaded事件呈现出的结果不一样,目前我已知的有着2个属性:

    • TopMost
    • ResizeMode

    建议:如果需要调整这些属性,可以在Loaded事件里面再设置他们,这样可以避免一些千奇百怪的问题。

    一、窗口最小化或者隐藏后,再显示后鼠标不穿透

    问题描述

    我有一个透明窗口,它是一个全屏置顶窗口,窗口里面有一个工具条,可以通过鼠标拖动工具条的位置,程序启动后,正常操作后,窗口穿透状态是正确的,但是当窗口最小化或者隐藏后,然后再显示后,出现了鼠标不穿透的问题。

    问题原因分析

    问题发现在重新显示窗口后

    解决办法

    目前暂时没有找到很好的解决这个问题的办法,只能采用迂回策略,在需要隐藏或者最小化窗口时,采用隐藏窗口下的控件来处理。

  • 相关阅读:
    centOS7集群hadoop环境搭建
    入门Echarts数据可视化:从基础到实践
    Ansible的role
    vite配置别名,并处理报错:找不到模块“xxx”或其相应的类型声明
    JavaScript · 9:数据类型转换 & 隐式转换
    如何利用无线远程通讯模块实现触摸屏与PLC间通信?
    Python学习(上)
    Learning Perception Module
    【LIUNX】配置缓存DNS服务
    前端面试常问的题目(持续更新中)
  • 原文地址:https://blog.csdn.net/sczmzx/article/details/140330900