我正试图在启动画面上显示图像,并在显示时进行拉伸。我试图显示的图像是一个简单的bmp文件。有什么想法吗?
在SplashWindow.xaml中:
<Window ... SizeToContent="WidthAndHeight">
<Grid>
...
<Image Grid.Row="0" Source="{Binding SplashImage}"></Image>
</Grid>
</Window>
在SplashViewModel.cs
中public ImageSource SplashImage
{
get
{
return ImageUtilities.GetImageSource(_splashImageFilenameString);
}
}
来自ImageUtilities.cs
public static ImageSource GetImageSource(string imageFilename)
{
BitmapFrame bitmapFrame = null;
if(!string.IsNullOrEmpty(imageFilename))
{
if(File.Exists(imageFilename))
{
bitmapFrame = BitmapFrame.Create(new Uri(imageFilename));
}
else
{
Debug.Assert(false, "File " + imageFilename + " does not exist.");
}
}
return bitmapFrame;
}
答案 0 :(得分:2)
在你的XAML中,将“Stretch”属性设置为“None”(我相信它默认为“Fill”):
<Image Grid.Row="0" Source="{Binding SplashImage}" Stretch="None"></Image>
如果您愿意,也可以显式设置“宽度”和“高度”属性。
答案 1 :(得分:2)
通常你想要:
<Image Source="{Binding ImagePath}" Stretch="Uniform" />
此值将尽可能放大图像,同时仍完全适合您的父控件。它不会扭曲它,它将保持源的纵横比。如果你使用
Stretch="None"
它将显示图像(或图像的适合度,它将剪辑)其原始尺寸,这并不总是您想要的。
无论如何,你有一些选择,但将Stretch设置为你想要的效果会影响图像的伸展方式。
答案 2 :(得分:0)
WPF不以像素显示内容(至少不在表面上)。 WPF以与设备无关的单位显示内容,特别是1/96英寸。
图像文件的元数据中包含DPI /分辨率信息,告诉计算机该图像的大小以英寸为单位。如果你的图像文件被编程为说它是8英寸宽,那么无论图像有多少像素,它都将等于WPF中的768个单位。
您可以使用Photoshop等图像编辑程序来更改图像的DPI,或者在WPF中显示时,只需给它一个明确的宽度和高度。