WPF中彻底解决Win10屏幕125%、100%缩放布局导致截图错位的问题

解决屏幕缩放下的截图难题

问题重现

       2021年下半年公司拿下了一个大项目,其中为了打通现有收银系统和青蛙pro以及蜻蜓F4两种进行双通信,需要收银机安装一个收银插件,实时获取现有收银系统的预结算总金额,并将金额传送给蜻蜓以及青蛙Pro。为了尽快落地,我的第一个解决方案是使用图像识别,即OCR光学识别技术,实时截取支付金额区域,识别现有收银系统的支付金额,在收银系统和蜻蜓以及青蛙Pro的lot小程序已打通双向通信能力情况下,将预结算总金额发送到蜻蜓以及青蛙Pro的lot小程序引导用户进行扫码付款操作。

       WPF引入一种新的XAML语言来开发界面,使用XAML语言将界面开发以及后台逻辑开发很好的分开,降低了前后台开发的耦合度,后台逻辑开发基于.Net语言。与前端Vue、React等框架都是MVVM思想,决定再用WPF露一手。截图功能在Win7上没有出现问题,但是在Win10中发现如果屏幕125%、150%放大布局,截取的屏幕在可视区域内竟然只显示一半,而有部分超出了可视区域,导致想识别的区域无法截图。下图是正常截图情况:

下图是屏幕的截取部分超出了可视区域,底部任务栏都不见了:

在不重启截图程序情况下,设置屏幕100%缩放布局应该是正常的,但是祸不单行,又出现了新的问题:

C#开发中,处理笔记本屏幕显示缩放比例(如125%、150%)对页面布局的影响是一个常见的问题。由于不同用户的显示设置不同,应用程序需要在各种缩放比例下保持良好的布局和可读性。以下是一些解决方法: 1. **使用高DPI感知模式**: - 在应用程序的配置文件(App.config或Web.config)中设置高DPI感知模式,使其能够在高DPI设置下正确缩放。 ```xml <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware>true/PM</dpiAware> </windowsSettings> </application> ``` 2. **使用自动缩放**: - 在Windows Forms应用程序中,可以使用`AutoScaleMode`属性来自动调整控件的大小和位置。 ```csharp this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; ``` 3. **使用布局容器**: - 使用如`TableLayoutPanel`、`FlowLayoutPanel`等布局容器,可以帮助控件在缩放时自动调整位置和大小。 4. **响应式设计**: - 在WPF或UWP应用程序中,可以使用响应式设计技术,根据屏幕大小和缩放比例动态调整布局。 5. **使用矢量图形**: - 尽量使用矢量图形(如SVG)而不是位图图像,这样在高DPI设置下图像不会失真。 6. **动态调整字体大小**: - 根据缩放比例动态调整字体大小,以确保文本在不同缩放比例下都能清晰显示。 ```csharp private void AdjustFontSize(float scale) { float fontSize = 12 * scale; label1.Font = new Font(label1.Font.FontFamily, fontSize); } ``` 通过以上方法,可以有效解决C#应用程序在不同屏幕缩放比例下的布局问题,确保用户体验的一致性。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值