【发布时间】:2019-04-26 13:28:39
【问题描述】:
我正在使用 WPF Ribbons 开发一个 Windows 应用程序。在这些功能区上,有带有图像的控件,由 (Large/Small)ImageSource 指定,就像在此示例中一样:
<Ribbon>
...
<RibbonGroup>
<RibbonToggleButton Name="NotExecutedQCButton" Margin="8,0,8,0"
Command="{Binding FilterNotExecutedCommand}"
IsChecked="{Binding NotExecutedChecked, Mode=TwoWay}"
LargeImageSource="pack://application:,,,/Sensor.UserControls;component/Icons/icons8.com/qc_notExecuted.png"
Label="Not Executed"/>
<RibbonButton Name="AllQCButton" Margin="8,0,8,0"
Command="{Binding FilterAllCommand}"
LargeImageSource="pack://application:,,,/Sensor.UserControls;component/Icons/icons8.com/qc_erase.png"
Label="Remove Filters"/>
</RibbonGroup>
...
现在,当我在这里使用 48x48 像素的图像时,它们会显得模糊且失真。就像这里:
Images do not render correctly in WPF ribbon control
当我将图像重新缩放为 32x32 时,它显示得很好。这是因为 RibbonImageSize 有一个固定值,可以在这里找到:
根据这个文档:
小图像通常为 16x16 像素,分辨率为 96 dpi。大图像通常为 32x32 像素,分辨率为 96 dpi。
注意“通常”这个词。在做一些进一步的研究时,这个值似乎取决于正在使用的显示器的 dpi:
https://docs.microsoft.com/en-us/windows/desktop/windowsribbon/windowsribbon-imageformats
本文档声明我需要提供不同缩放版本的图像以支持不同的显示器,如下所示:
<Command.LargeImages>
<Image Source="res/CutLargeImage32.bmp" Id="116" Symbol="ID_CUT_LARGEIMAGE1" MinDPI="96" />
<Image Source="res/CutLargeImage40.bmp" Id="117" Symbol="ID_CUT_LARGEIMAGE2" MinDPI="120" />
<Image Source="res/CutLargeImage48.bmp" Id="118" Symbol="ID_CUT_LARGEIMAGE3" MinDPI="144" />
<Image Source="res/CutLargeImage64.bmp" Id="119" Symbol="ID_CUT_LARGEIMAGE4" MinDPI="192" />
</Command.LargeImages>
现在我在我的示例中将这段代码放在哪里?我的代码中没有示例中的命令,并且 RibbonButton 或其他 Ribbon 控件元素没有 LargeImages 属性。
或者更好的是,我怎样才能确定这些 16x16 或 32x32 的固定值始终被使用?如果不能,如何为我的应用程序中的功能区控件提供这些值?现在,我对跨显示器的不同尺寸不感兴趣,我可以对每台显示器上的所有图像(一个用于小,一个用于大)使用一种硬编码分辨率。但现在看来,当我在具有不同显示器的机器上运行我的应用程序时,图像可能会变得模糊。即使我设法为所有这四种情况指定图像,它也无法在没有这四种指定 DPI 值之一的显示器上工作。
我只想确保这些图像不模糊,至少在标准的现代显示器上是这样。我怎样才能做到这一点?
【问题讨论】: