首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

强制DPI在WPF中进行测试

强制DPI在WPF中进行测试是指在Windows Presentation Foundation(WPF)应用程序中,强制设置显示器的DPI(每英寸点数)来进行测试。DPI是衡量显示器分辨率的一个重要指标,它决定了显示器上的图形和文本的大小。在WPF应用程序中,可以使用以下方法强制设置DPI:

  1. 在应用程序的配置文件中设置DPI:

在应用程序的配置文件(app.config)中,添加以下代码:

代码语言:xml<configuration>
复制
 <system.windows>
    <dpiAwareness xmlns="http://schemas.microsoft.com/winfx/2006/xaml">
      PerMonitorV2
    </dpiAwareness>
  </system.windows>
</configuration>

这将强制应用程序使用PerMonitorV2模式,该模式允许在不同显示器上使用不同的DPI设置。

  1. 在应用程序的代码中设置DPI:

在应用程序的代码中,可以使用以下代码强制设置DPI:

代码语言:csharp
复制
using System.Windows;
using System.Windows.Media;

namespace MyWPFApp
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            // 设置DPI
            SetDpi();
        }

        private void SetDpi()
        {
            // 设置DPI为96
            SetDpi(96);
        }

        private void SetDpi(double dpi)
        {
            // 获取当前窗口
            Window window = Application.Current.MainWindow;

            // 获取窗口的源
            PresentationSource source = PresentationSource.FromVisual(window);

            // 获取窗口的DPI
            double oldDpi = source.CompositionTarget.TransformToDevice.M11;

            // 设置新的DPI
            double newDpi = dpi / 96.0;
            double scaleFactor = newDpi / oldDpi;
            window.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor);
        }
    }
}

这将强制设置应用程序的DPI为96,并根据新的DPI值调整窗口的大小。

在进行测试时,可以使用不同的DPI设置来测试应用程序的显示效果,以确保应用程序在不同显示器上都能正常显示。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF 修复 ContextMenu 开启 PerMonitorV2 后所用 DPI 错误

本文告诉大家如何修复 WPF 的 ContextMenu 开启 PerMonitorV2 之后,双屏不同的 DPI 的设备上,副屏弹出的 ContextMenu 使用了主屏的 DPI 导致缩放错误的问题...关于什么是 PerMonitorV2 请参阅 支持 Windows 10 最新 PerMonitorV2 特性的 WPF 多屏高 DPI 应用开发 - walterlv 开启 PerMonitorV2...这就是导致 ContextMenu 视觉效果的 DPI 缩放不对的原因 修复方法就是给 ContextMenu 一个参考的控件,通过此参考控件,可以让 ContextMenu 进行多屏幕不同的 DPI...Style = contextMenuStyle, ItemsSource = menuItems, // Popup 内部不处理显示过程的...DPI 改变,依赖于创建时要能找到正确的屏幕, // 如果什么都不指定,那么创建会创建到主屏,如果实际显示副屏了,那就会因为 DPI 缩放导致尺寸不对。

33830

WPF .NET Core 3.1.19 版本没有跟随 DPI 缩放文本过小问题

本文告诉大家一个坑, .NET Core 3.1.19 版本,因为 WPF 框架的处理不当,而让应用没有感知 DPI 而不会跟随缩放,让文本过小的问题。...本文将告诉大家解决方法和原因 最佳解决方法:升级 .NET Core 版本即可 其次的解决方法是 App 的启动方法添加如下代码 public partial class App : Application...原因是更换 module initializer 进行模块初始化的锅,对这么大的框架来说,任何的更改也许都在挖坑 详细请参阅如下内容: [release/3.1] Application scaling...to 4.6.2 to fix module initializer injection regression. by ryalanms · Pull Request #5377 · dotnet/wpf...with very small text · Issue #5472 · dotnet/wpf ----

55910

WPF 实现融合效果

融合效果 融合效果是指对两个接近的元素进行高斯模糊后再提高对比度,使它们看上去“粘”在一起。...之前的一篇文章,我使用 Win2D 实现了融合效果,效果如下: 不过 Win2D 不适用于 WPF WPF 可以使用 BlurEffect 配合自定义 Effect 实现类似的效果。...自定义 Effect Win2D ,实现融合效果的步骤是先使用 GaussianBlurEffect 两个元素间产生粘连在一起的半透明像素,再用 ColorMatrixEffect 加强对比对,... WPF 我们可以直接使用自带的 BlurEffect 实现高斯模糊,效果如下: 接下来需要加强对比度。...WPF 没有 ColorMatrixEffect 的替代品,不过我们可以使用 HLSL(高级着色器语言)编写 PixelShader 并生成自定义的 WPF Effect。

1.2K20

避免 Swift 单元测试强制解析

比如 处理 Swift 中非可选的可选值类型[1] 这篇文章项目逻辑需要时使用强制解析去处理可选类型,将导致一些离奇的情况和崩溃。...所以尽可能地避免使用强制解析,将有助于搭建更加稳定的应用,并且发生错误时提供更好的报错信息。那么如果是编写测试时,情况会怎么样呢?...因为我们配套的测试是需要我们长期使用、拓展和掌握的,我们理应让这些工作更容易完成。 强制解析的问题 那么这一切与 Swift 强制解析有什么关系呢?...XCTAssertEqual(user.name, "John") XCTAssertEqual(user.age, 30) } } 如你所见,进行断言之前,我们强制解析了...我测试代码唯一使用强制解析的时候,就是构建测试案例的属性时。因为这些总是 setUp 中被创建、tearDown 中被销毁,我并不把他们当作真正的可选类型。

1.1K10

WPF 使用 VisualBrush 4k 加 200 DPI 设备上某些文本不渲染看不见问题

但是一些 4k 加百分之 200 的 DPI 缩放设备上,看不到某些 GlyphRun 的内容,本文记录此问题和对应的解决方法 前置要求: 4k 分辨率屏幕 百分之两百 DPI 缩放 使用 GlyphRun...直接或间接 绘制到 VisualBrush WPF 的底层文本绘制都是采用 GlyphRun 绘制,因此可以认定为影响为全部文本,以及对应的文本控件 现象: 有某些文本内容不绘制渲染出来,看不见某些文本内容...后续还有执行默认命中测试的时候,取 RenderData 里面的内容进行计算渲染边距以及命中测试。...此时将 DrawingVisual 放入到 VisualBrush ,作为 Brush 给一个矩形做填充,这样的优势在于进行命中测试的时候,默认是无视图层的,只会对矩形进行命中测试。...表示我追踪了代码也没有发现更本质的问题,而且此问题只有我的此图表控件才有偶尔复现,能复现的设备上,每次都能用相同的图表数据进行复现。

80120

Slim 伪造Request来进行你的HTTP测试

代码需要做HTTP测试,Laravel中有自带这方面的功能。现在使用slim就得自己动手丰衣足食。 网上找了许多例子,关于这方便的比较少。...然后就想到了查看Laravel的源码 看了一下,发现其实是自己伪造一个Request对象,然后执行返回结果 然后自己也参考这个slim实现 构建好测试文件 composer.json加入以下内容自动加载...app->run(); // 并且声明一个函数得到 App 对象 function getApplication() { global $app; return $app; } 创建测试文件...handle($request); // 需要用 (string) 强转,不要直接 $response->getBody()->getContents() // 区别就是强转,实现类把读取指针重置到了第一位...string)$response->getBody(); $this->assertJson($responseContent); } } 最后的最后,执行phpunit得到测试结果

13010

Windows 下的高 DPI 应用开发(UWP WPF Windows Forms Win32)

由于涉及到坐标转换,这种转换经常发生在计算的不知不觉;所以无论你使用哪种 Windows 下的 UI 框架进行开发,你都需要了解这些内容,以免不断踩坑。...DPI 缩放;但是 WPF 嵌入的其他 UI 框架不支持自动 DPI 缩放。...而 Per-Monitor V1 和 Per-Monitor V2 的支持操作系统级别是兼容的,所以只需要修改 WPF 的应用程序清单即可兼容第二代屏幕级 DPI 感知。...,如果你做到了 System Aware 的要求位图是不会模糊的(Vista 引入 DWM 虚拟化强制拉伸,主要是当时的引用没有做相关支持,DPI 情况下会控件会变得非常小且布局大概率会乱掉)。...- Per Monitor DPI - WPF Preview.docx at master · Microsoft/WPF-Samples Windows 10 修复显示模糊的应用 - Windows

64150

FluentValidationC# WPF的应用

其实它也可以用于WPF属性验证,本文主要也是讲解该组件WPF的使用,FluentValidation官网是: https://fluentvalidation.net/ 。...本文需要实现的功能unsetunset 提供WPF界面输入验证,采用MVVM方式,需要以下功能: 能验证ViewModel定义的基本数据类型属性:int\string等; 能验证ViewModel定义的复杂属性...创建测试实体类 4.2.1. 普通类 - Student 此类用作ViewModel的对象属性使用,学生类包含3个属性:名字、年龄、邮政编码。...创建验证器 验证属性的写法有两种: 可以实体属性上方添加特性(本文不作特别说明,百度文章介绍很多); 通过代码的形式添加,如下方,创建一个验证器类,继承自AbstractValidator,在此验证器构造函数写规则验证属性...及Field类似,这里我加上了保存(SaveCommand)和取消(CancelCommand)两个命令,其中保存命令需要所有属性验证通过才可用,通过注册属性的变化事件PropertyChanged,变化事件处理程序验证

11810

软件测试 如何对算法进行测试

没错,这几个与普通功能测试中用到的测试方法基本一样,而下面就是普通功能测试不会用到的测试方法 算法pk(赛马) 对于一个需求,不同的人或团队可以设计出不同的算法模型,到底哪个更靠谱,是骡子是马拉出来溜溜...这个环节是算法测试的关键部分,用例设计主要采用场景法,通过列举不同场景,对多个算法分别进行测试验证,最终综合所有场景的算法模型的表现,选出前几名。...下文中通过实例列举了这个环节测试用例,可以更好地理解这样设计用例的原因。 A/B测试 由于算法的准确性会受到测试数据的影响,而在测试环境,数据的来源一般是手动插入数据库或从线上导入数据。...尽管测试数据会接近于真实数据,但仍然会有数据类型覆盖不够全面、数据量不够大等方面的问题。 因此,即使算法模型测试环境通过验收之后,仍然不能在生产环境全部放量。...A/B测试之后,拿到真实的数据,最终经过架构师、研发经理、产品经理等研讨之后选出符合预期的算法 答疑 上述例子假定最终要采用的是算法2,但是你可能会有很多疑问: 算法1不是早晚高峰期时段表现最好吗,

97410

WPF dotnet 6 开启 PM v2 的 DPI 感知 导致触摸线程访问 UI 属性抛异常

带触摸屏上的应用,应用运行过程,切换屏幕的 DPI 之后,触摸过程有概率触发在触摸线程访问 UI 的依赖属性,触摸线程抛出异常炸掉应用 条件 必须同时满足以下条件: dotnet 6: dotnet...多屏高 DPI 应用开发 - walterlv 应用开启 StylusPlugIn 的支持 触摸设备上运行,进行触摸交互 应用运行过程存在切换系统的 DPI 的值 需要先运行应用,对应用进行触摸交互...我问他,你有触摸屏测试没,他说没有,不过 WPF 内部有个自动化测试,自动化测试通过就可以了。...于是触摸就因为拿不到 DPI 参数进行计算而偏移 我修复了触摸偏移问题是通过拿触摸输入源的窗口句柄进行获取 DPI 计算。...获取触摸的输入源窗口,不需要等待 UI 线程命中测试,于是修复了触摸偏移的问题 然而以上输入引入了新的问题,那就是开启 PM v2 特性, DPI 变更之后,触摸比 UI 线程更快进入 GetAndCacheTransformToDeviceMatrix

59100

Flutter测试(二):项目中进行 Widget 测试

上回书对 Flutter Widget 测试的官方 Demo 进行了简单的讲解,这篇文章我们对自己的项目进行 Widget 测试。 就拿 「想吃啥」APP 来进行测试吧。 ?...首页,我们可以看到有 6 个 Widget,有: 1.荤菜 & 素菜:2.选个菜吧 ×23.Button ×2 因为平时我们写APP的时候,肯定会封装一些 Widget 来进行复用,所以首页 选个菜吧...APP是用来随机菜单2.VoidCallback:用于 IconButton 的点击事件 这样我们就封装成了一个 Widget,可以在编写 UI 的时候复用了,那既然写完了 Widget,下面就要对他进行测试了...Button 开发,对于 Button 样式的一致性大家肯定是有了解的,那既然如此,就要封装好一个通用的Button。...总结 Flutter ,一切皆为 Widget。 相信各位学 Flutter 的也都知道这个概念,那就可以看得出来,Widget 测试是 Flutter 中最重要的测试

81320

App测试强制等待和隐式等待谁更强?

简介添加等待是为了确保自动化脚本执行过程与应用程序之间的同步和稳定性。应用程序的响应时间是不确定的,可能存在网络延迟、加载时间、动画效果等因素。...这可以包括显式等待(例如等待特定元素出现、消失或可点击),或隐式等待(整个脚本执行过程设置一个全局的等待时间)。等待操作有助于提高脚本的稳定性,减少因应用程序响应不一致而导致的测试失败。...强制等待解决方案:报错的元素操作之前添加等待。原理:线程休眠一定时间。...隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的交互。解决方案:使用显式等待。...这些等待分为强制等待、隐式等待和显式等待三种。用户可以根据不同的需求结合使用这些等待方式,以提高测试脚本的稳定性和可靠性。

8610

Rainbond上使用Locust进行压力测试

Locust简介 Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。并且有一个用户友好的 Web 界面,可以实时显示测试进度。甚至可以测试运行时更改负载。...它也可以没有 UI 的情况下运行,使其易于用于 CI/CD 测试。 Locust 使运行分布多台机器上的负载测试变得容易。...并发访问站点的每个Locust(蝗虫)实际上都在其自己的进程运行(Greenlet)。这使用户可以Python编写非常有表现力的场景,而不必使用回调或其他机制。...当Host以及用户,并发量定义完毕以后,还需要去定义一下测试用例,即用户访问Host之后的行为,Locust是通过一个名为/locustfile.py 的Python脚本来定义用户行为,Rainbond...平台的 Locust_Master 组件内 环境配置 -> 配置文件设置 进行编辑修改。

76710

WPF 程序应用 Windows 10 真•亚克力效果

本文介绍如何在 WPF 程序应用 Windows 10 真•亚克力效果。(而不是一些流行的项目里面自己绘制的亚克力效果。)...---- API 需要使用的 API 是微软的文档并未公开的 SetWindowCompositionAttribute。...我另一篇博客中有介绍此 API 各种用法的效果,详见: 使用 SetWindowCompositionAttribute 来控制程序的窗口边框和背景(可以做 Acrylic 亚克力效果、模糊效果、主题色效果等...) - walterlv 当然,使用此 API 也可以做 Windows 10 早期的模糊效果,比如: Windows 10 上为 WPF 窗口添加模糊特效(就像开始菜单和操作中心那样) - walterlv...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

30610

Go对gRPC+ProtoBuf与Http+Json进行基准测试

局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。 gRPC默认使用protobuf,它更快,因为它是二进制的且是类型安全的。...我编写了一个演示项目,使用JSON over HTTP与使用gRPC API的方式进行了一次基准测试。 该库包含2个相同的API:基于Protobuf的gRPC和JSON over HTTP。...目的是进行两种方式的基准测试,并对结果进行比较。API只包含一个创建用户的接口,请求(Request)的过程包含验证的步骤。...2种方式的程序,请求、验证和响应这几个步骤都是相同的,所以我们只是测试整个响应过程。当然,基准测试还包括响应解析。...://localhost:6061/debug/pprof/profile 我每次运行pprof后使用top查看CPU使用情况,结果显示,Protobuf的资源消耗较少,是Http消耗资源的的70%。

1.7K10

Go对gRPC+ProtoBuf与Http+Json进行基准测试

局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。 gRPC默认使用protobuf,它更快,因为它是二进制的且是类型安全的。...我编写了一个演示项目,使用JSON over HTTP与使用gRPC API的方式进行了一次基准测试。 该库包含2个相同的API:基于Protobuf的gRPC和JSON over HTTP。...目的是进行两种方式的基准测试,并对结果进行比较。API只包含一个创建用户的接口,请求(Request)的过程包含验证的步骤。...2种方式的程序,请求、验证和响应这几个步骤都是相同的,所以我们只是测试整个响应过程。当然,基准测试还包括响应解析。...://localhost:6061/debug/pprof/profile 我每次运行pprof后使用top查看CPU使用情况,结果显示,Protobuf的资源消耗较少,是Http消耗资源的的70%。

2.9K80

DevOps中进行测试:概念与最佳实践

这意味着开发生命周期的每个步骤测试都在帮助维护软件质量起着不可或缺的作用。 1. 传统测试的工作原理 软件测试不是一个新概念。但是传统环境测试看起来与DevOps环境测试有很大不同。...如果在测试阶段检测到任何错误,那么返回并进行更改将是一项挑战,而且成本很高。这样做的原因是结构性的:特定的错误情况开始时就应该被很好地识别。...在这种情况下,很难预期的时间表内维持所需的标准和质量。 ---- 2. DevOps环境中进行测试 敏捷开始崛起之后的几年里,软件测试有了长足的发展。...从那时起,将更快,更协作的测试策略,工具和技术引入了测试领域。 这是DevOps环境中进行测试测试是一个连续且自动化的过程,可实现连续且快速的软件交付。...充分利用测试自动化 DevOps环境,开发人员经常将代码合并到中央存储库。这意味着代码通过持续集成(CI)不断更新。

81120
领券