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>