Я работаю над приложением Windows, используя ленты WPF. На этих лентах есть элементы управления с изображениями, которые определяются (Большой / Маленький) 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 пикселей, они выглядят размытыми и искаженными. Прямо как здесь:
Изображения отображаются неправильно в элементе управления ленты WPF
Когда я масштабирую изображения до 32x32, они отображаются нормально. Это связано с тем, что RibbonImageSize имеет фиксированное значение, которое можно найти здесь:
https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.ribbon.ribbonimagesize?view=netframework-4.8#System_Windows_Controls_Ribbon_RibbonImageSize_Large
Согласно этому документу:
Маленькое изображение, как правило, 16x16 пикселей при 96 dpi. Большое изображение обычно составляет 32x32 пикселей с разрешением 96 точек на дюйм.
Обратите внимание на слово «обычно». При дальнейших исследованиях это значение зависит от 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 или другие элементы управления ленты не имеют свойства LargeImages.
Или лучше, как я могу точно знать, что эти фиксированные значения 16x16 или 32x32 всегда используются? Если я не могу, как я могу предоставить эти значения для элементов управления ленты в моих приложениях? Сейчас меня не интересуют разные размеры мониторов, и я согласен с использованием одного жестко заданного разрешения для всех изображений (одно для малого, одно для большого) на каждом мониторе. Но теперь кажется, что когда я запускаю свое приложение на машине с другим монитором, изображения могут быть размытыми. Даже когда мне удастся указать изображения для всех этих четырех случаев, он не будет работать на мониторах, у которых нет одного из этих четырех указанных значений DPI.
Все, что я хочу, это убедиться, что эти изображения не размыты, по крайней мере, на стандартных современных мониторах. Как мне этого добиться?