CommonOpenFileDialog导致Windows窗体缩小

zmh*_*zmh 10 c# dialog winforms windows-api-code-pack

我一直在研究Windows窗体应用程序,并且最近添加了一个简单的设置页面,允许用户选择输出所在的文件夹.OpenFileDialog是丑陋的,不好用,所以我已经在Windows API CodePack中添加了访问CommonOpenFileDialog-所有好处.

当我打开CommonOpenFileDialog时,Windows窗体应用程序缩小到较小的大小,如附加的图像所示.

左边是程序,右边是打开的对话框:

左边是程序正常,右边是打开对话框.

我之前和之后都试过检查表格的大小,这没有改变,所以我打了一个砖墙.任何信息都是有用的,如果需要我可以提供更多细节.

打开表单的代码是:

CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.DefaultDirectory = selectedFolderTextBox.Text;
dialog.IsFolderPicker = true;

if (dialog.ShowDialog() != CommonFileDialogResult.Ok) return;

selectedFolderTextBox.Text = dialog.FileName;
Run Code Online (Sandbox Code Playgroud)

Eli*_*ron 12

当我将windows Settings->System form 100% 中的Scale 和 layout更改为更高的值时,就会发生这个问题。它可能与高 DPI 和 DPI 缩放有关。

我找到了几个解决方案:

解决方案 1:配置 Windows 窗体以获得高 DPI 支持

此解决方案仅适用于 .NET Framework 4.7 或更高版本。

将此添加到App.config文件中。

<System.Windows.Forms.ApplicationConfigurationSection>
    <add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection> 
Run Code Online (Sandbox Code Playgroud)

来源:配置您的 Windows 窗体应用程序以获得高 DPI 支持

在 app.config 文件中启用每个显示器的 DPI 感知。

Windows 窗体引入了一个新的 System.Windows.Forms.ApplicationConfigurationSection元素,以支持从 .NET Framework 4.7 开始添加的新功能和自定义。要利用支持高 DPI 的新功能,请将以下内容添加到您的应用程序配置文件中。

<System.Windows.Forms.ApplicationConfigurationSection>
    <add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection> 
Run Code Online (Sandbox Code Playgroud)

重要的

在 .NET Framework 的早期版本中,您使用清单来添加高 DPI 支持。不再推荐此方法,因为它会覆盖 app.config 文件中定义的设置。

解决方案 2:使用 Ookii.Dialogs.WinForms NuGet 包

使用Ookii.Dialogs.WinForms NuGet 包。它不存在收缩问题。它有一个VistaOpenFileDialog类似于CommonFileDialogWindowsAPICodePack 的。它还有一个不错的文件夹浏览器,VistaFolderBrowserDialog例如CommonFileDialogwith IsFolderPickerset to true

解决方案 3:覆盖 .exe 文件的高 DPI 缩放行为

此解决方案需要单独手动更改每个应用程序 .exe 文件的兼容性设置,因此它不是最佳解决方案。

为此,您需要右键单击 .exe 文件,选择“属性”->“兼容性”->“更改高 DPI 设置”并选中“覆盖高 DPI 缩放行为”并选择其中一个选项(请参阅:如何在 Windows 10 中使用 DPI 缩放)修复模糊的旧应用程序


小智 5

通过添加app.manifest文件启用dpi-aware,并取消注释此块.

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)

这适用于我的Surface Pro 4(dpi刻度200%).