WPF 窗口白屏问题分析与初步解决

news/2025/2/15 11:24:12/

环境描述

开发环境:

Windows 11

Visual Studio 2022

.NET Framework 4.8

目标电脑环境

Windows10

默认包含了 .NET Framework 4.8

现象

编译好的WPF应用程序,是基于 .NET Framework 4.8开发的,在大部分电脑上可以正常使用。在某个客户机上使用时,打开软件只出现白屏,默认窗口的放大缩小、关闭按钮、以及拖拽都可以正常使用,但是客户区域内容为空白如下图所示。

排查过程

1.安装.NET Framework 4.8.1

❌问题未解决

2.使用驱动精灵更新显卡等驱动

❌问题未解决

3.在.NET Framework4.8编译WinFrom的测试软件,在目标电脑上使用

WinFrom的测试软件可以正常使用。

4.在.NET 6上编译WPF测试软件,并在目标电脑上安装对应的环境

❌测试软件打开也是空白的

5.在WPF测试软件上使用样式库FirstDraft中的FdWindow替换默认的Window作为窗口,编译后在目标电脑上使用

✔ 窗口显示正常

原因分析

1.客户电脑缺失某些与WPF窗口渲染的库

2.查看FirstDraft的源代码可以发现,FdWindow窗口是基于WindowResizer和user.dll实现的。可能和这个有关系。

解决办法

使用NuGet获取WeDraft.Toolkit.FirstDraft控件,并将项目中的窗口全部用FdWindow替换。

仓库地址:mefdeamon/Toolkit-WeDraft: Build our own WPF Control Style Library [First Draft] [FirstDraft] (github.com)

总结

1.虽然使用WeDraft.Toolkit.FirstDraft可以临时解决问题,但是没有找到问题的根本原因。


积跬步以至千里:) (:一阵没来由的风


http://www.ppmy.cn/news/1147384.html

相关文章

python - 第15章 GUI的最终选择 Tkinter

文章目录 tk1tk2tk3 添加图片tk4 图片作背景 tk1 import tkinter as tkapptk.Tk() app.title("这是标题") # 显示标题theLabeltk.Label(app,text窗口程序!) # 显示文本,图片,图标 theLabel.pack() # 自动调节组件尺寸app.mainloop()tk2 import tkinter as tkclas…

微服务10-Sentinel中的隔离和降级

文章目录 降级和隔离1.Feign整合Sentinel来完成降级1.2总结 2.线程隔离两种实现方式的区别3.线程隔离中的舱壁模式3.2总结 4.熔断降级5.熔断策略(根据异常比例或者异常数) 回顾 我们的限流——>目的:在并发请求的情况下服务出现故障&…

【使用 TensorFlow 2】03/3 创建自定义损失函数

一、说明 TensorFlow 2发布已经接近5年时间,不仅继承了Keras快速上手和易于使用的特性,同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则:简化概念,海纳百川,构建生态.这是本系列的第三部分,…

03.爬楼梯 04.使用最小花费爬楼梯

03.爬楼梯 关于dp[i] dp[i - 1] dp[i - 2] 的思考 到达dp[i-1]的方法总数,不管方法总数是怎样麻烦,都到了dp[i-1]了,到了dp[i-1],那么每种方法的再加1,就到了dp[i],dp[i-2]2同理,但是要注意就算dp[i-1]…

CART 算法——决策树

目录 1.CART的生成: (1)回归树的生成 (2)分类树的生成 ①基尼指数 ②算法步骤 2.CART剪枝: (1)损失函数 (2)算法步骤: CART是英文“class…

HDLbits:Exams/ece241 2013 q4

本题是一个实际的应用问题,一个水库,有三个传感器S1、S2、S3提供输入,经过控制电路,四个输出给到四个流量阀。也就是说,本题想让我们根据水位去控制流量阀。 问题的关键在于把什么抽象成state,答案是&…

玩转工具系列之Markdown

零、学习网站&#x1f353; 官方链接野生网站链接野生资料链接 一、设置字体&#x1f34d; 1. 字体 <font face"黑体">我是黑体字</font> <font face"宋体">我是宋体字</font> <font face"微软雅黑">我是微软…

【C++ Primer Plus学习记录】指针——使用delete释放内存

当需要内存时&#xff0c;可以使用new来请求&#xff0c;使用完内存后&#xff0c;可以使用delete将其归还给内存池。 归还或释放&#xff08;free&#xff09;的内存可供程序的其他部分使用。 使用delete时&#xff0c;后面要加上指向内存块的指针&#xff08;这些内存块最初…