(转)WPF中Image控件Source属性的相对路径和绝对路径问题
(经验总结)
WPF中Images控件路径问题
在WPF当中,我们经常⽤到Image控件来展⽰图⽚。Image控件通过Source属性来控制要现实的图⽚。
前台Xaml修改Source。通过前台Xaml代码为Image指定Source属性时可以是图⽚的相对路径也可以是图⽚的绝对路径。绝对路径没有问题,但是如果指定的时图⽚的相对路径,我们必须保证图⽚已经包含在当前项⽬当中,并且图⽚的属性“⽣成操作”必须是Resource才可以在程序运⾏时正常显⽰图⽚,如果图⽚仅仅是在项⽬中的⽂件夹下⽽没有包含在项⽬当中,我们指定其为Image控件的Source属性时在Visual Studio的Xaml页⾯预览当中可以看到图⽚,但是在程序运⾏时图⽚是不显⽰的。需要主要的是但我们在Xaml代码当红直接修改Image的Source属性时经常会有延迟或者类似缓存效应,有时修改了Image的 Source可能不会马上看到效果。
absolute relative后台C#修改Source。在实际的开发过程当中,我们经常需要通过后台的C#动态的为Image空间指定Source来显⽰想要展⽰的图⽚。我们在C#当中通常以Image_Test.Source=new BitmapImage(new Uri(“图⽚路径”,UriKind. RelativeOrAbsolute))的⽅式来为Image控件指定Source 属性。在C#当中为Imag
e空间指定Source属性时图⽚路径可以是相对路径也可以绝对路径。相对路径要求⽐较严格,C#中指定Source时图⽚的“⽣成操作”属性必须是“Resource”,与在Xaml当中⼀样。在需要固定的⼀些项⽬中的图⽚切换时我们可以通过这种⽅式完成。绝对路径是没有问题的,不需要图⽚⽂件包含在项⽬当中。直接在实例化Uri时指定图⽚的绝对路径就OK啦。绝对路径书写起来⽐较⿇烦,我们不可能⼿写图⽚的绝对路径,⽽且当我们的程序移动到了其他位置时⼿写的绝对路径就不再有效啦。此时,我们可以通过程序动态的读取当前程序所在的绝对路径,然后再结合图⽚相对于程序的路径最终获得图⽚的绝对路径,这样就解决了图⽚绝对路径的问题,当我们程序移动到其他位置时,我们依然可以动态获取程序运⾏的图⽚的相对路径。System.IO.Path.GetFullPath()可以获取相对于当前运⾏的可执⾏程序所在⽬录的给定的相对路径对应的绝对路径。当前可执⾏程序⽬录⼀般在 …/bin/Debug(Release)/
例如:要显⽰在程序⽬录下的Images/test/1.jpg
(1)图⽚包含在项⽬当中
①Xaml指定
<Image Name="img_test" Source="Images/test/1.jpg"></Image>
②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));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论