王彦为
聚沙成塔
  1. 首页
  2. WPF
  3. 正文

XP运行WPF程序,部分控件透明

2016年12月14日 6944次浏览 51人点赞 0条评论

最近在做一个关于医疗项目的软件,使用wpf开发。由于不确定目标客户的Window版本,所以尽量兼容XP以后所有Window系统。最后在测试过程中发现一个问题,在XP系统下,部分控件显示不全,更专业的描述就是部分控件透明。这一现象在其他Window系统并未发现。后来经过查阅资料才发现是WPF硬件加速的问题。

WPF硬件加速工作原理


硬件加速就是利用硬件来替代软件算法以充分利用硬件所固有的快速运算的特性。说白了就是操作系统在渲染UI时,利用GPU代替CPU做大量浮点型运算。
WPF从以下三个层次上来利用硬件加速的特性:

wpfrender
WPF API首先检测你的硬件系统所支持的硬件加速的等级,比如显卡的显存大小,像素深度等等。基于你所使用的硬件,WPF将从以下三种渲染模式中的选择一种作为其渲染模式:

  • 第0级

如果你的显卡不支持硬件加速,WPF将采用第0级渲染模式。也就是说它将使用软件加速。这相当于使用低于7.0版本的DirectX。

  • 第1级

如果你的显卡部分地支持硬件加速,那么WPF将采用第1级渲染模式。这相当于使用版本号在7.0到9.0之间的DirectX。

  • 第2级

如果你的显卡完全支持硬件加速,那么WPF将采用第2级渲染模式。这相当于使用版本号等于或者大于9.0的DirectX。

解决方案

方案一、关闭XP硬件加速

同时按住Win+R键,输入dxdiag,弹出如图所示的界面,将配置与红色方框一致即可。

disabledirectx

方案二、WPF代码禁用硬件渲染

在App.cs的Main函数中添加代码
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly即可,完整代码如下


using System;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;

class App
{
    [STAThread]
    public static void Main(params string[] args)
    {
        RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
        Application app = new Application();
        app.Run(new Window1());
    }
}

关于WPF的Rendering,我会在以后的博文中介绍。

标签: 暂无
最后更新:2020年09月25日

王彦为

准备考试,暂停更新一个月。

打赏 点赞
下一篇 >

文章评论

取消回复

王彦为

准备考试,暂停更新一个月。

分类目录
  • WPF (5)
  • 嵌入式 (8)
  • 工具 (1)
  • 攻防 (2)
  • 杂谈 (2)
最新 热点 随机
最新 热点 随机
版本控制工具之SVN的使用 玩转DragronBoard 410c系列之七:Linux系统使用QT Creator开发ARM应用程序 玩转DragronBoard 410c系列之六:Linux系统使用C语言控制GPIO 网站改版说明 玩转DragronBoard 410c系列之五:ARM交叉编译工具链介绍 玩转DragronBoard 410c系列之四:Linux系统搭建ARM应用开发环境
玩转DragronBoard 410c系列之四:Linux系统搭建ARM应用开发环境 WPF的TextBox输入验证之ValidationRule验证 WPF的TextBox输入验证之IDataErrorInfo验证 玩转DragronBoard 410c系列之二:远程访问Linux系统 WPF中TextBox在.NET 4.5无法输入浮点数 玩转DragronBoard 410c系列之六:Linux系统使用C语言控制GPIO

COPYRIGHT © 2020 王彦为. ALL RIGHTS RESERVED.

苏ICP备16063331号-1