WPF: Как отобразить изображение в оригинальном размере? - PullRequest
95 голосов
/ 16 июня 2010

У меня проблема с отображением изображений в WPF.

Вот мой код:

<Button HorizontalAlignment="Left" Grid.Column="1" Grid.Row="5" Margin="0,5">
        <Button.Content>
            <StackPanel Orientation="Horizontal" Margin="10,0">
                <Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" Width="24" Height="24" />
                <TextBlock Text="添加" />
            </StackPanel>
        </Button.Content>
    </Button>

У меня есть изображение с оригинальным размером 32 * 32, но когда я запустил вышеуказанный кодизображение будет растягиваться, чтобы заполнить все пространство, превышающее его первоначальный размер.Я также установил для свойства «Растянуть» значение «Нет», но, похоже, оно не работает.

Итак, как я могу решить эту проблему?Спасибо!

Ответы [ 5 ]

123 голосов
/ 11 февраля 2011

Здесь - похожий вопрос. Обычно достаточно установить Stretch="None".

Также очень важно, какой DPI имеет изображение, установленное в метаданных. Мне потребовалось много времени, чтобы понять, что если DPI изображения отличается от DPI монитора (обычно 96), WPF автоматически изменит размер изображения, так как он пытается быть независимым от DPI .

7 голосов
/ 05 марта 2014
<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" />

Это работает для меня, для изображения с 600x800 pixels и 96dpi.

@ rishad2m8 Если размер неизвестен, можно сначала определить размер с помощью https://msdn.microsoft.com/en-us/library/system.drawing.image.size(v=vs.110).aspx Iбы догадаться.

6 голосов
/ 16 июня 2010

Попробуйте не указывать ширину или высоту, используйте это вместо этого:

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />
3 голосов
/ 11 сентября 2014

Добавление к ответу Пайи: чтобы компенсировать попытку WPF адаптироваться к разрешению мониторов, вы должны иметь возможность установить Width и Height в исходные размеры файла и использовать Stretch="Fill".Это сработало для меня.

0 голосов
/ 10 июля 2019

Если вы хотите отобразить изображение с исходным размером, но не знаете размер изображения, я думаю, что лучший способ - установить изображение в качестве фона UIElement.Как это:

    <Button>
        <Button.Background>
            <ImageBrush ImageSource="/images/user_add.png" Stretch="None"/>
        </Button.Background>
    </Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...