WPF:如何以原始大小显示图像?

106

我在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",但似乎它不起作用。

那么,我该如何解决这个问题呢? 谢谢!


通过在 Windows 文件资源管理器 中显示以下列来验证图像 DPI:水平分辨率垂直分辨率 - Pressacco
5个回答

135

10
关于 DPI 设置的技巧非常好,Paja。我的几个工具栏图标被设置为 72 DPI,即使像素尺寸为 16x16,它们看起来也会更大。 - dthrasher
1
我不明白。你是说WPF会根据屏幕的分辨率以不同的方式布局窗口吗?这绝对不可能是一件好事。 - Kyle Delaney
@KyleDelaney 你看过我在答案中链接的那篇文章了吗? - Paya
1
@KyleDelaney 是的,这也是为什么在WPF中使用“点”而不是“像素”来指定大小、距离、边距等的原因。 - Paya
1
@PawełAudionysos 我已经修复了损坏的链接。 - Paya
显示剩余4条评论

7
尝试不指定宽度或高度,改为像这样使用:
<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />

7

1
如果图像大小未知怎么办? - rishad2m8
你真是个救星。你不会想知道我为这个问题苦恼了多久。 - David Atkinson
1
使用 LayoutRounding 属性设置为 true 对我很有帮助!谢谢! - Blake Thingstad

4

补充Paya的答案: 要弥补 WPF 试图适应显示器分辨率的问题,您应该能够将 WidthHeight 设置为文件的原始尺寸,并使用 Stretch="Fill"。这对我行得通。


0
如果您想要以原始大小显示图像,但不知道图像的尺寸,我认为最好的方法是将图像设置为UIElement的背景。就像这样:
    <Button Height="100" Width="100">
        <Button.Background>
            <ImageBrush ImageSource="/images/user_add.png" Stretch="None"/>
        </Button.Background>
    </Button>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接