为什么我可以在XAML中使用绝对路径检索图像,但它不能在代码后面工作?

时间:2017-03-29 12:17:00

标签: c# wpf xaml

试图理解Assembly,Uri和所有这些事情,并且有一些我不理解的东西,希望我可以一次性问他们。

我的解决方案包含两个"汇编"如果我这样理解正确的话。

Project Assemblies

我希望 FetchResources 获取该图片并将其显示在我的MainWindow上。

当我在xaml中这样做时,它没有问题。

Xaml FetchResources

但是在后面的代码中我使用相同的Uri,但由于某种原因它不会显示图像。

var uri = new Uri("pack://application,,,/WPF_UserControll_Test;component/Images/71805972.jpg", UriKind.Absolute);
BitmapImage bmi = new BitmapImage();
bmi.UriSource = uri;
testimage.Source = bmi;

我不确定我是否正确理解装配,也不完全了解Uri。我在WPF中读过微软打包URI ,但我不清楚它是如何工作的。

为什么我可以通过XAML而不是后面的代码到达图像?

2 个答案:

答案 0 :(得分:1)

“申请”后你缺少一个冒号(:)。试试这个:

testimage.Source = new BitmapImage(new Uri("pack://application:,,,/WPF_UserControll_Test;component/Images/71805972.jpg", UriKind.Absolute));

如果您不使用接受Uri的构造函数重载,则应在设置BeginInit()属性之前和之后调用EndInit()UriSource方法:

BitmapImage bmi = new BitmapImage();
bmi.BeginInit();
bmi.UriSource = new Uri("pack://application:,,,/WPF_UserControll_Test;component/Images/71805972.jpg", UriKind.Absolute);
bmi.EndInit();
testimage.Source = bmi;

答案 1 :(得分:0)

试试这个:

MSDN

以下示例显示了XAML资源文件的pack URI,该文件位于引用的特定于版本的程序集的项目文件夹的根文件夹中。

包://应用:,,, / ReferencedAssembly; V1.0.0.1;组件/ ResourceFile.xaml