WPF 中以相对路径引用资源所出现的异常

来源:转载

0. 在类型为WPF项目工程文件夹中创建一个名为“Icon”文件夹,并在该文件夹中添加“flow-c0.png”文件,并确保该文件的“Build Action”为“Resource”

1 . 在window中添加一个Rectangle对象(x:Name=“rct”),然后在对应的隐藏文件中,添加以下代码:

     ImageBrush imgBrush = new ImageBrush(new BitmapImage(new Uri("/Icon/flow-c0.png", UriKind.Relative)));
      rct.Fill = imgBrush;

 

程序运行之后,会抛出“未能找到路径“W:/Icon/flow-c0.png”的一部分”的异常;

2. 如果上例改为:

     Image img= new image();

     img.Source =new ImageBrush(new BitmapImage(new Uri("/Icon/flow-c0.png", UriKind.Relative)));

 

则正常运行;

3. 如果采用相对路径的方式,在DrawingContext.DrawingImage()函数中也会抛出“无法找到路径”的异常;

4. 如果在编码中以pack方式引用,在Image或DrawingContext.DrawingImage(),则不会出现异常:

drawingContext.DrawImage(new BitmapImage(new Uri("pack://,,,/Icon/flow-c0.png",UriKind.RelativeOrAbsolute)),new Rect(new Size(16,16)));

 

5. 如果在编码中,如果以相对路径引用,本文的“4”中代码更改为:

           Uri uri = new Uri("/Icon/flow-c0.png", UriKind.Relative);
            StreamResourceInfo info = Application.GetResourceStream(uri);         

            BitmapImage bi = new BitmapImage();        .
            bi.BeginInit();
            bi.StreamSource = info.Stream;
            bi.UriSource = new Uri("/flow-c0.png", UriKind.Relative);
            bi.EndInit();  

           drawingContext.DrawImage(bi,new Rect(new Size(16,16)));      

该代码也可正常运行;

6. 现在问题是:导致“1”、“3”不能正常运行的原因是什么呢?

本文来自cheqingjun的博客,原文地址:http://blog.csdn.net/cheqingjun/archive/2011/06/29/6574706.aspx


分享给朋友:
您可能感兴趣的文章:
随机阅读: