gpt4 book ai didi

.net - 为什么 .NET winform 在大 DPI 设置下无法正确缩放?

转载 作者:行者123 更新时间:2023-12-02 15:48:14 24 4
gpt4 key购买 nike

我的 .NET 应用程序(VB.NET 3.5,如果您确实必须知道的话)表单在以高 DPI 设置呈现时无法正确格式化。到目前为止我发现的所有修复都只是将问题的原因解释为“某些 UI 元素无法正确缩放”。我想知道是否有人有更有意义的解释?谢谢!

最佳答案

基本上,问题在于 GDI+(以及 Windows 窗体)使用设备像素作为其默认测量单位。当您更改 DPI 设置时,像素的物理大小实际上不会改变(像素就是像素),但以非像素大小测量的字体和图像会相应缩放。 Windows 窗体试图通过为布局留出更多空间来尽可能地适应这一点,但唯一真正的解决方案是始终使用非基于像素的测量系统。这就是 WPF 所做的事情。

在 WPF 中,在 96 DPI 下,与设备无关的像素对应于与物理像素相同的大小。但是,当您更改系统的 DPI 时,WPF 会全局缩放虚拟坐标系。应用程序、控件等都不知道它们不再与物理像素对齐。事实上,这有时会导致 WPF 中出现锯齿问题,但您几乎不必担心应用程序的布局在不同的 DPI 设置中会有所不同。

为了最大限度地减少 Windows 窗体中的问题,您可以做的一件事是使用"new"(从 .NET 2.0 开始)布局面板,例如 TableLayoutPanel、FlowLayoutPanel 等。尽可能使用 Anchor、Dock 和 AutoSize。这将允许 Windows 窗体尽可能地重排您的 UI。

另请注意,如果您以非标准 DPI 创建表单,Windows 窗体将使用此作为“基本”尺寸。它几乎总是把事情搞砸。因此,请尝试使用 96 DPI 来设计您的表单。

关于.net - 为什么 .NET winform 在大 DPI 设置下无法正确缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2445138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com