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

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

问题描述

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

问题原因分析

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

解决办法

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

相关推荐
一个帅气昵称啊17 小时前
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
.net·efcore·仓储模式
helloworddm19 小时前
CalculateGrainDirectoryPartition
服务器·c#·.net
步步为营DotNet19 小时前
深度剖析.NET中HttpClient的请求重试机制:可靠性提升与实践优化
开发语言·php·.net
ChaITSimpleLove20 小时前
使用 .net10 构建 AI 友好的 RSS 订阅机器人
人工智能·.net·mcp·ai bot·rss bot
专注VB编程开发20年20 小时前
vb.net宿主程序通过统一接口直接调用,命名空间要一致
服务器·前端·.net
ChaITSimpleLove1 天前
基于 .NET Garnet 1.0.91 实现高性能分布式锁(使用 Lua 脚本)
分布式·.net·lua
用户4488466710602 天前
.NET进阶——深入理解线程(2)Thread入门到精通
c#·.net
没有bug.的程序员2 天前
SOA、微服务、分布式系统的区别与联系
java·jvm·微服务·架构·wpf·日志·gc
Macbethad2 天前
基于WPF的半导体设备配方管理程序技术方案
wpf