本文介绍如何通过将 Visual Studio 运行为 DPI 不感知进程来解决高分辨率监视器上 Windows 窗体设计器的缩放限制导致的呈现问题。 HDPI 代表每英寸高点,每个点表示物理设备像素。
更高的像素密度会创建更锐利的图像,并正确显示缩放元素的大小。 如果没有适当的缩放,用户界面(UI)元素和文本太小,无法有效使用,并且可能会重叠。 为了帮助解决此问题,Windows 会自动缩放 UI 百分位以匹配 DPI 设置。 例如,100% 的 DPI 设置表示 96 DPI,125% 为 120 DPI。 过去监视器通常以每英寸 96 像素的规格发货,Windows 用此作为 100% 位图绘图的基线。 但是,随着显示技术的进步,监视器现在配备的面板分辨率为 300 DPI 或更高。
当应用程序声明自己为 DPI 感知时,它是一个语句,它指定应用在较高的 DPI 设置下表现良好,因此 Windows 可以应用自动缩放。 相反,DPI-unaware 应用程序以固定 DPI 值(每英寸 96 像素)或 100%呈现,因此不会应用自动缩放。
Windows 窗体设计器不知道 DPI
注释
在 Visual Studio 2022 版本 17.8 或更高版本中,可以避免本文中所述的问题。 Visual Studio 2022 版本 17.8 支持 DPI 感知应用程序中的不支持 DPI 的选项卡。 请参阅 Visual Studio DPI 改进。 这样,便可以为 DPI-unaware 上下文设计 Windows 窗体,而无需在 DPI-unaware 模式下运行 Visual Studio。 若要在 Windows 窗体项目中使用此设置,请将属性 ForceDesignerDPIUnaware 设置为 true 项目文件中:
<PropertyGroup>
...
<ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>
默认情况下,Visual Studio 是一个DPI感知应用程序,这意味着界面会自动缩放。 但是, Windows 窗体设计器 是一个不知道 DPI 的应用,因此它显示为 96 DPI 的位图。 如果没有自动缩放支持,在 HDPI 监视器上打开表单时会出现问题和重叠问题,如下图所示:
在 HDPI 监视器上的 Windows 窗体设计器 中打开窗体时,Visual Studio 会显示一个信息栏,其中显示监视器的当前缩放百分比(例如 150%/144 DPI),一个选项用于在 100% 缩放的情况下重启 Visual Studio 以匹配 Windows 窗体设计器,以及更多信息。 在 100% 缩放时重启会使 VS 对 DPI 不敏感,从而允许正确渲染且无重叠问题。
小窍门
- 如果关闭了信息栏并想要将 Visual Studio 重启为 DPI-unaware, 请使用 DevEnv.exe 工具。
- 如果不在设计器中工作,则可以忽略信息栏。 还可以 禁用通知 ,以便信息栏不会继续显示。
将 Visual Studio 重启为 DPI-unaware 进程
建议为解决这些 UI 问题的方案是,将 Visual Studio 作为不感知 DPI 的进程重启,这意味着它以 100% 缩放(96 DPI)重新启动。
切换到 DPI-unaware 模式:
- 在 Windows 窗体设计器中打开窗体时出现的黄色信息栏上,选择“使用 100% 缩放重启 Visual Studio”选项。
在完成使用Windows 窗体设计器的工作后,重启 Visual Studio 以将其恢复为默认的 DPI 感知进程,这一点非常重要。
返回到 DPI 兼容:
- 关闭并重新打开 Visual Studio 以恢复到 DPI 感知模式。 或者,在信息栏中选择 “重启 Visual Studio”作为 DPI 感知进程 选项。
当 Visual Studio 作为不支持 DPI 模式运行时,设计器布局问题得以解决,但字体可能会显得模糊,并且其他设计器(如 XAML 设计器)中可能会出现问题。 当 DPI 不知道“Visual Studio 正在以 DPI-unaware 进程的形式运行”时,Visual Studio 会显示不同的信息性消息。 WPF 和 XAML 设计器可能无法正确显示。
注释
- 如果在选择将 Visual Studio 重启为不支持 DPI 的进程的选项后解除停靠 工具窗口,则工具窗口的位置可能会更改。
- 当 Visual Studio 以 DPI-unaware 进程的形式重启时,默认的 Visual Basic 配置文件不会重新打开项目。 而是通过 文件>最近使用的项目和解决方案访问项目。
使用 Windows 将显示缩放设置为 100%
若要避免使用 Visual Studio 切换显示缩放,请调整 Windows 设置中的缩放。 例如,在 Windows 11 中,可以将缩放设置为 100% (96 DPI)。
为此,请在任务栏搜索框中键入 显示设置 ,然后选择“ 更改显示设置”。 在 “设置” 窗口中,将 文本、应用和其他项的大小 设置为 100%。 请注意,100% 缩放(96 DPI)可能会导致用户界面过小,难以实际使用。
使用 DevEnv 命令行工具禁用缩放
若要使用命令行工具而不是 UI(用户界面)工具来管理显示设置,请使用 DevEnv.exe。 该 devenv.exe 命令采用 /noscale 命令行参数,以在 100% 缩放模式下运行。 下面介绍如何使用它:
- 从 Visual Studio 菜单栏中选择 工具>命令行>开发人员命令提示符 。
- 然后,输入
devenv /noScale。
其他选项
除了上述选项,还可以尝试以下选项:
例如,在 Visual Studio 中禁用缩放通知(例如,如果不在设计器中工作)。 下面介绍如何禁用通知:
打开“工具>选项”窗格,然后展开“所有设置>>”部分。
在 “高 DPI 支持”下,清除 DPI 缩放通知 复选框。
打开 “工具>选项 ”对话框并展开 “Windows 窗体设计器>常规 ”部分。
在 “高 DPI 支持”下,将 DPI 缩放通知 选项设置为 False。
故障排除
如果 DPI 感知转换在 Visual Studio 中不起作用,请确保该值 dpiAwareness 不在注册表编辑器的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe 子项中。 如果存在该值,请将其删除。