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

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

问题描述

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

问题原因分析

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

解决办法

办法1

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

办法1遇到的问题

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

办法2(正确办法)

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

c# 复制代码
    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事件里面再设置他们,这样可以避免一些千奇百怪的问题。

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

问题描述

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

问题原因分析

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

解决办法

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

相关推荐
冷眼Σ(-᷅_-᷄๑)8 小时前
Path.Combine容易被忽略的细节
c#·.net
林子漾17 小时前
【paper】分布式无人水下航行器围捕智能目标
分布式·wpf
Crazy Struggle20 小时前
.NET 8 强大功能 IHostedService 与 BackgroundService 实战
c#·.net·.net core
喵叔哟1 天前
【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--访问权限中间件
微服务·中间件·.net
wyh要好好学习1 天前
C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中
开发语言·c#·wpf
咩咩觉主1 天前
尽量通俗易懂地概述.Net && U nity跨语言/跨平台相关知识
unity·c#·.net·.netcore
喵叔哟1 天前
【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--角色可访问接口管理
数据库·微服务·.net
lgcgkCQ2 天前
任务调度中心-XXL-JOB使用详解
java·wpf·定时任务·任务调度
Vicky&James2 天前
英雄联盟客户端项目:从跨平台Uno Platform到Win UI3的转换只需要30分钟
github·wpf·跨平台·英雄联盟·winui·unoplatform