为WinForms .NET 5程序创建高DPI Ribbon菜单
ComponentOne 2020v3版本致力于将最需要的ComponentOne控件引入.NET 5框架,并为WinForms Edition添加了令人兴奋的新功能。其中的一项功能是借助C1Icon对C1Ribbon控件进行了高DPI支持。C1Ribbon:支持高DPI新的C1Ribbon控件使用C1Icon对象集定义图标,这些图标应以不同的元素状态或不同的元素大小显示在单独的Ribbon元素中。例如,您可以为16x16元素大小指定一个小的符号图标,为32x32元素大小指定一个较大的png图像,以及在HighDPI模式下使用的可选矢量图标,这可能需要具有不同大小的大图像。C1Icon是一系列类,允许指定可以着色和调整大小的单色图标。这些图标被认为在控件内部使用,并允许客户通过控件的API指定不同的图标。可能的来源是字体,矢量(路径或SVG)和图像。https://global-cdn.grapecity.com/blogs/componentone/20210114-creating-high-dpi-ribbons-for-winforms-dotnet-5/support-for-apis1.PNG
新版本中,对高分辨率DPI显示器的支持现在已成为WinForms的C1Ribbon的内置部分。通过支持高DPI,现在使用C1Ribbon开发的WinForms应用程序,可以在高DPI设备上显示而不会降低质量。这意味着,当应用程序在缩放设置不同于100%的系统上运行时,它将被正确缩放。
高DPI没有高DPI
https://gccontent.blob.core.windows.net/gccontent/blogs/componentone/20210114-creating-high-dpi-ribbons-for-winforms-dotnet-5/with-high-dpi.png
https://gccontent.blob.core.windows.net/gccontent/blogs/componentone/20210114-creating-high-dpi-ribbons-for-winforms-dotnet-5/without-high-dpi.png
在进一步探讨如何启用缩放的细节之前,我们先简要了解一下DPI是什么以及为什么它很重要。
DPI和显示缩放因子每英寸点数(DPI),从技术上讲是指每英寸打印机点数,它是空间打印的度量。对于显示器来说,指可以在1英寸范围内的一行中放置的单个点的数量。大多数旧式桌面UI框架都有内置的假设,即在使用过程中,显示器的DPI不会更改。不过,这种假设不再成立,因为在多显示器设置(如每个显示器具有不同的比例因子)的情况下,显示器DPI现在通常会发生多次更改,这些情况是通过远程桌面从高DPI笔记本电脑/平板电脑连接到低DPI设备的等在这种情况下,如果未进行DPI缩放,则应用程序看起来模糊和/或大小不正确。
启用缩放要启用缩放,您所要做的就是将您的应用程序声明为支持DPI,C1Ribbon会根据当前DPI设置自动缩放其UI元素。根据目标.NET框架的不同,有多种方法可以启用/禁用缩放。如果目标框架是.NET v4.7或更高版本,并且您要在Windows 10 Creators Update开始的Windows操作系统上运行它,则必须添加app.manifest文件和/或app.config文件但是,如果目标框架是.NET Core 3.0或更高版本,则不需要app.manifest和app.config文件。从.NET Core 3.0开始,Microsoft引入了一种为Windows窗体设置高DPI模式的新方法。静态方法称为Application.SetHighDpiMode(HighDpiMode),其中HighDpiMode是一个枚举,并具有以下值:DpiUnaware,SystemAware,PerMonitor,PerMonitorV2和DpiUnawareGdiScaled。Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);
DPI Awareness Mode“ DPI Awareness Mode”指定在高分辨率屏幕上显示应用程序时的显示方式。
DPI Awareness:已启用DPI Awareness:禁用
https://gccontent.blob.core.windows.net/gccontent/blogs/componentone/20210114-creating-high-dpi-ribbons-for-winforms-dotnet-5/dpi-awareness-enabled.png
https://gccontent.blob.core.windows.net/gccontent/blogs/componentone/20210114-creating-high-dpi-ribbons-for-winforms-dotnet-5/dpi-awareness-disabled.png
下表共享了“ HighDpiMode”枚举可用的各种值。
项目值描述
DpiUnaware0应用程序窗口不会为DPI更改而缩放,并且始终假定缩放比例为100%。
DpiUnawareGdiScaled4与DpiUnaware相似,但是提高了基于GDI / GDI +的内容的质量。
PerMonitor2窗口在创建时会检查DPI,并在DPI更改时调整比例因子。
PerMonitorV23与PerMonitor相似,但可启用子窗口DPI更改通知,改进的comctl32控件缩放以及对话框缩放。
SystemAware1该窗口一次查询主监视器的DPI,并将其用于所有监视器上的应用程序。
结论随着显示技术的发展,从不需要DPI缩放到缩放变得越来越关键,使用WinForms编写的成千上万的应用程序,都需要有良好的High DPI支持,使用C1Ribbon,您可以无缝创建最新的Microsoft Office 2019风格的应用程序。并完美的支持高DPI
页:
[1]