WPF: как отобразить изображение с оригинальным размером?

У меня проблема с отображением изображений в 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, но когда я запустил вышеприведенный код, изображение растянется, чтобы заполнить все пространство, выходящее за его исходный размер. Я также установил свойство "Stretch" ​​в "None", но кажется, что он не работает.

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

Ответ 1

Здесь есть аналогичный вопрос. Обычно настройка Stretch="None" достаточно.

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

Ответ 2

<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" />

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

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

Ответ 3

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

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />

Ответ 4

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

Ответ 5

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

    <Button>
        <Button.Background>
            <ImageBrush ImageSource="/images/user_add.png" Stretch="None"/>
        </Button.Background>
    </Button>