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", но кажется, что оно не работает.

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

4 85

4 ответа:

здесь - Это подобный вопрос. Как правило, параметр Stretch="None" достаточно.

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

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

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />
<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 я бы предположил.

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