c#WPF URI语法

时间:2016-02-05 00:45:14

标签: c# wpf

我刚学习c#并且一直在努力使用WPF中的URI。我已经搜索了一下,但没有太多运气。

基本上我试图将一个BitmapImage对象存储为Car对象中的属性。然后我想在WPF表单的Image控件中显示BitmapImage。

该应用程序是一个简单的应用程序(它用于Uni分配),因此没有数据库等。

我有两种方法可以做到这一点。首先是我从文本文件中预加载Car数据,包括我要加载的JPG的文件名。我已将JPG包含在名为Files的目录中,该目录位于我的源代码和类文件所在的主目录之外。我已将JPG文件设置为'内容'并且'始终复制'。当我运行Debug时,它将Files目录和JPG复制到debug \ bin目录。

我的代码通过使用URI引用JPG来创建BitmapImage,如下所示;

BitmapImage myImage = new BitmapImage (new Uri("Files/" + Car.Imagefilename, UriKind.Relative);
Car.Image = myImage;
ImageControl.Source = myImage;

如果我在调试器中单步执行此代码,它有时会工作并显示图像,但大部分时间它都没有。

我的第二种方法是用户创建新车。这种方法总能奏效。在这一个中,我使用文件对话框(dlg)来选择图像并使用绝对路径。

BitmapImage myImage = new BitmapImage (new Uri(dlg.Filename, UriKind.Absolute);
Car.Image = myImage;
ImageControl.Source = myImage;

所以......我无法弄清楚为什么第一种方法不起作用。我认为它与相对引用有关,但我不能弄清楚如何正确地使用语法。我已尝试使用" pack:,,,",我已尝试添加"组件",我已尝试过' @& #39;在" pack"之前。我似乎无法找到解释这一点的东西。

道歉,如果这是直截了当的,但它正在努力!感谢任何指针。

2 个答案:

答案 0 :(得分:3)

如果图像文件位于Visual Studio项目的“文件”文件夹中,则应将Build Action设置为Resource(并Copy to Output Directory设置为Do not copy) ,并按Resource File Pack URI

加载它们
var image = new BitmapImage(new Uri("pack://application:,,,/Files/" + Car.Imagefilename));
Car.Image = image;
ImageControl.Source = image;

无需在任何地方复制文件。图像直接从装配中加载。

答案 1 :(得分:1)

首先尝试使用其绝对路径加载图像文件。例如,如果图像存储在c:\ projects \ yourproject \ files中,则尝试使用类似

的内容
BitmapImage myImage = new BitmapImage (new Uri("c:/projects/yourproject/files/carname.jpg", UriKind.Absolute);

如果有效,您所面临的是路径计算问题。

此时,您可以在运行时使用AppDomain.CurrentDomain.BaseDirectory参考可执行文件计算Absolute,或使用App.Config存储路径并从那里引用它。

干杯