如何在XAML中获取图像以显示其实际大小?

我有一个27 x 27像素的图像,我在WPF中显示,但它显示大于 窗口的大小。

如何让它显示其实际尺寸?

替代文字http://www.deviantsart.com/upload/m20dk6.png

XAML:

   

代码背后:

 using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; using System; namespace TestImage23434 { public partial class Window1 : Window { public Window1() { InitializeComponent(); TextBlock tb = new TextBlock(); tb.Text = "above image "; MainStackPanel.Children.Add(tb); Image img = new Image(); img.Source = new BitmapImage(new Uri(@"C:\test\circle.png")); img.HorizontalAlignment = HorizontalAlignment.Left; img.VerticalAlignment = VerticalAlignment.Top; MainStackPanel.HorizontalAlignment = HorizontalAlignment.Left; MainStackPanel.VerticalAlignment = VerticalAlignment.Top; MainStackPanel.Children.Add(img); TextBlock tb2 = new TextBlock(); tb2.Text = "below image"; MainStackPanel.Children.Add(tb2); } } } 

img.Stretch = Stretch.None

默认情况下, Stretch属性的值为Uniform ,它会调整图像大小以填充所有可用空间。

这些提示都不适合我。 一些约束技巧让我走了。

  

您可以将Strech设置为None,但这适用于我的应用程序使用.net 4.5.1。

 img.HorizontalAlignment = HorizontalAlignment.Left; img.VerticalAlignment = VerticalAlignment.Top; img.Stretch = Stretch.None; 

除非指定了大小,否则StackPanel将拉伸以填充/溢出它所在的任何容器。 由于您没有在任何设置上设置边距或对齐,因此所有内容的默认行为是Margin="0,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ,或者只是将“Stretch to fill”。 对齐/定位元素将解决此问题。

编辑:添加img.Stretch = Stretch.None; ,我也建立了一个示例应用程序并对其进行了测试……

它也可能是元数据中图像的DPI属性。 它应该是96. https://stackoverflow.com/a/4965404/659326