Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Не работает свойство SnapsToDevicePixels


Автор: snav 9.2.2010, 12:19
Не могу побороть размытость изображения на кнопках в ToolBar'е. Размытие возникает из-за того, что строка меню над тулбаром имеет дробную высоту (если, например, задать высоту меню жестко Height="24", то рисунки на кнопках отображаются четко). Однако свойство SnapsToDevicePixels, почему-то, не помогает. Задал SnapsToDevicePixels="true" уже везде где только возможно, но кнопки все равно размытые. :( Что делать? Рисунки на кнопках стандартные (PNG, 16x16, 96 dpi).

Код

<Window x:Class="MyWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    SnapsToDevicePixels="True" MinWidth="700" MinHeight="350">
    <DockPanel>
        <Menu DockPanel.Dock="Top" SnapsToDevicePixels="True">
            <MenuItem Header="Файл" />
            <MenuItem Header="Правка" />
        </Menu>
        <ToolBar DockPanel.Dock="Top" SnapsToDevicePixels="True">
            <ToolBar.Resources>
                <Style TargetType="{x:Type Image}">
                    <Setter Property="SnapsToDevicePixels" Value="true" />
                    <Setter Property="Stretch" Value="None" />
                </Style>
            </ToolBar.Resources>
            <Button Command="ApplicationCommands.New" >
                <Image Source="Images/New.png" />
            </Button>
            <Button Command="ApplicationCommands.Open">
                <Image Source="Images/Open.png" />
            </Button>
        </ToolBar>
    </DockPanel>
</Window>



Автор: exBlender 10.2.2010, 05:14
Глючный форум сожрал мой длинный пост с разъяснениями... 
Короче, если при жесткой высоте в пикселях иконки выглядят четко, ставьте ее, и всё... Не будет у вас работать SnapsToDevicePixels с битмапами, по крайней мере, до выхода .NET4.

Автор: kasner 10.2.2010, 09:57
Код

    <Image Source="bitmap.png"  RenderOptions.BitmapScalingMode="NearestNeighbor"/>


http://msdn.microsoft.com/ru-ru/library/system.windows.media.renderoptions.aspx
http://msdn.microsoft.com/ru-ru/library/system.windows.media.bitmapscalingmode.aspx

Автор: snav 11.2.2010, 18:28
kasner, спасибо. Взял на заметку. К сожалению, это будет работать только при разрешении экрана 96 dpi, а при 120 dpi будет очень некрасиво, т.е. нужно отслеживать физическое разрешение экрана и вручную устанавливать подходящий BitmapScalingMode.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)