我遇到了一个问题,无法在高 DPI 设置下正确显示 WinForms 应用程序。我查看了各种网站,发现 WinForms 都有正确的 AutoScaleMode。我尝试将其设置为 DPI 和 Font 两种模式,但是在使用高 DPI 设置(例如 125%)时,窗体始终在底部被截断。
我添加了一些代码来检查,如果我将 AutoScaleMode 设置为 DPI,则在窗体加载时,我会看到 AutoScaleDimensions 为 120,120,CurrentAutoScaleDimensions 也是 120,120。在 Form.designer.cs 文件中,有一行代码将 AutoScaleDimension 设置为 96,96。
如果我将 AutoScaleMode 设置为 Font,则可以在设计器中看到 AutoScaleDimensions 正确地设置为 new System.Drawing.SizeF(6F, 13F),但是当窗体加载时,AutoScaleDimensions 和 CurrentAutoScaleDimensions 都被设置为 8F,16F。
这个应用程序混合了一些WPF和WinForms,而且WPF屏幕首先出现。所以根据.Net 3.5中混合WinForms和WPF应用程序中的DPI缩放,我尝试设置应用程序和首先显示的WPF屏幕的TextFormattingMode为“Display”,但没有任何区别。
坦率地说,我对导致这个问题感到困惑。我想我可以添加代码来在运行时检测DPI并以编程方式调整大小,但我不应该这样做。AutoScaleMode(及相关)属性应该使这相当自动化。那么还应该检查什么可能会导致这个问题?
我添加了一些代码来检查,如果我将 AutoScaleMode 设置为 DPI,则在窗体加载时,我会看到 AutoScaleDimensions 为 120,120,CurrentAutoScaleDimensions 也是 120,120。在 Form.designer.cs 文件中,有一行代码将 AutoScaleDimension 设置为 96,96。
如果我将 AutoScaleMode 设置为 Font,则可以在设计器中看到 AutoScaleDimensions 正确地设置为 new System.Drawing.SizeF(6F, 13F),但是当窗体加载时,AutoScaleDimensions 和 CurrentAutoScaleDimensions 都被设置为 8F,16F。
这个应用程序混合了一些WPF和WinForms,而且WPF屏幕首先出现。所以根据.Net 3.5中混合WinForms和WPF应用程序中的DPI缩放,我尝试设置应用程序和首先显示的WPF屏幕的TextFormattingMode为“Display”,但没有任何区别。
坦率地说,我对导致这个问题感到困惑。我想我可以添加代码来在运行时检测DPI并以编程方式调整大小,但我不应该这样做。AutoScaleMode(及相关)属性应该使这相当自动化。那么还应该检查什么可能会导致这个问题?