首页
学习
活动
专区
圈层
工具
发布

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 缩放导致尺寸不对。

61930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    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 ----

    70910

    在 WPF 中实现融合效果

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

    1.9K20

    避免 Swift 单元测试中的强制解析

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

    1.4K10

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

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

    1.2K20

    在 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得到测试结果

    54110

    FluentValidation在C# 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,在变化事件处理程序中验证

    1.9K10

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

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

    1.8K10

    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

    1.8K50

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

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

    51410

    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 中最重要的测试。

    1K20

    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

    86700

    在Rainbond上使用Locust进行压力测试

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

    1.3K10

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

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

    1K10

    在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.1K10

    在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%。

    3.6K80
    领券