WPF中Images控件路径问题
在WPF当中,我们经常用到Image控件来展示图片。Image控件通过Source属性来控制要现实的图片。
前台Xaml修改Source。通过前台Xaml代码为Image指定Source属性时可以是图片的相对路径也可以是图片的绝对路径。绝对路径没有问题,但是如果指定的时图片的相对路径,我们必须保证图片已经包含在当前项目当中,并且图片的属性“生成操作”必须是Resource才可以在程序运行时正常显示图片,如果图片仅仅是在项目中的文件夹下而没有包含在项目当中,我们指定其为Image控件的Source属性时在Visual Studio的Xaml页面预览当中可以看到图片,但是在程序运行时图片是不显示的。需要主要的是但我们在Xaml代码当红直接修改Image的Source属性时经常会有延迟或者类似缓存效应,有时修改了Image的 Source可能不会马上看到效果。
后台C#修改Source。在实际的开发过程当中,我们经常需要通过后台的C#动态的为Image空间指定Source来显示想要展示的图片。我们在C#当中通常以Image_Test.Source=new BitmapImage(new Uri(“图片路径”,UriKind. RelativeOrAbsolute))的方式来为Image控件指定Source属性。在C#当中为Image空间指定Source属性时图片路径可以是相对路径也可以绝对路径。相对路径要求比较严格,C#中指定Source时图片的“生成操作”属性必须是“Resource”,与在Xaml当中一样。在需要固定的一些项目中的图片切换时我们可以通过这种方式完成。绝对路径是没有问题的,不需要图片文件包含在项目当中。直接在实例化Uri时指定图片的绝对路径就OK啦。绝对路径书写起来比较麻烦,我们不可能手写图片的绝对路径,而且当我们的程序移动到了其他位置时手写的绝对路径就不再有效啦。此时,我们可以通过程序动态的读取当前程序所在的绝对路径,然后再结合图片相对于程序的路径最终获得图片的绝对路径,这样就解决了图片绝对路径的问题,当我们程序移动到其他位置时,我们依然可以动态获取程序运行的图片的相对路径。System.IO.Path.GetFullPath()可以获取相对于当前运行的可执行程序所在目录的给定的相对路径对应的绝对路径。当前可执行程序目录一般在 …/bin/Debug(Release)/
例如:要显示在程序目录下的Images/test/1.jpg
(1) 图片包含在项目当中
①Xaml指定
②C#指定
img_test.Source = new BitmapImage(new Uri("Images/test/1.jpg",UriKind.Relative));
(2) 图片不包含在项目当中
string path = System.IO.Path.GetFullPath("../../Images/test/1.jpg");//从当前可执行程序目录返回到项目根目录在再取Images文件夹 程序目录一般为 项目根目录/bin/Debug/程序.exe
img_test.Source = new BitmapImage(new Uri(path,UriKind.Absolute));