Ash*_*non 11 wpf image pack-uri
我正在将Button的内容设置为图像.它看起来像这样:
<Button>
<Image Source="pack://application:,,,/NavigationImages/nav_up_left.png" />
</Button>
Run Code Online (Sandbox Code Playgroud)
在我的项目中,我有一个名为NavigationImages的子文件夹,在该文件夹中是图像文件nav_up_left.png.
当我查看Designer时,图像出现,但是在运行时,我收到一个IOException错误,说它找不到资源.
Build Action设置为Resource.
实际上,这在一个项目中运作良好.但是当我将它复制到另一个项目上时,它失败了.这似乎是一个非常简单的问题,但我发现自己很难过,准备开始拔头发了.@ _ @
非常感谢您的想法和建议!
Ash*_*non 10
Whelp,我想通了......有点儿.
我将xaml代码从一个输出类型为Windows Application的项目复制到另一个输出类型为Class Library的项目.
我当时没有想到它,但显然当输出类型是类库时,包URI需要改变.
因此,"pack://application:,,,/NavigationImages/nav_up_left.png"我没有改变它"/ProjectName;component/NavigationImages/nav_up_left.png",现在它的工作正常.
我不是100%清楚为什么这是有效的而不是前者.我已经阅读了WPF中有关包URI的MSDN文档,但也许我误解了一些东西.
如果有人可以给我一个很好的解释,为什么我以前拥有的东西在输出类型为Class Library的项目中不起作用,我会不加考虑这个答案.
我可能错过了一些非常简单的东西.@ _ @
我只是在这个同样的问题上挣扎了很长一段时间,我认为原文中出现问题的部分原因是缺少“组件”一词。例如,我有
myBitmapImage.UriSource = new Uri(@"pack://application:,,,/MyApp;images/mona2.jpg");
Run Code Online (Sandbox Code Playgroud)
但应该有
... = new Uri(@"pack://application:,,,/MyApp;component/images/mona2.jpg");
Run Code Online (Sandbox Code Playgroud)
尽管“组件”一词出现,但它并不是路径名的一部分——它是必须存在的字符串文字。为什么?我猜有人认为这是个好主意。
对于那些在事情的另一部分苦苦挣扎的人,“MyApp”怎么样?这就是议会的名称。右键单击项目名称,选择“属性...”,在“应用程序”选项卡下,您将看到“程序集名称:”字段。
如果您不想搜索它(或者担心它可能会改变,破坏您的代码),您可以这样做:
String appUri = @"pack://application:,,,/" +
System.Reflection.Assembly.GetEntryAssembly().GetName().Name + ";";
String path = appUri + "component/images/mona2.jpg";
myBitmapImage.UriSource = new Uri(path);
Run Code Online (Sandbox Code Playgroud)
我承认,代码不是很漂亮——它显然可以缩短——但我希望它能让你到达你需要去的地方。请记住将图像文件的“Build”属性设置为“Resource”!
| 归档时间: |
|
| 查看次数: |
4628 次 |
| 最近记录: |