Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c WPF URI语法_C#_Wpf - Fatal编程技术网

C# c WPF URI语法

C# c WPF URI语法,c#,wpf,C#,Wpf,我只是在学习c,一直在努力在WPF中使用URI。我在谷歌上搜索了不少,但运气不太好 基本上,我尝试将BitmapImage对象作为属性存储在汽车对象中。然后,我想在WPF表单上的图像控件中显示BitmapImage 该应用程序是一个简单的应用程序,用于Uni分配,因此没有数据库等 我有两种方法。首先,我从一个文本文件中预加载汽车数据,包括我要加载的JPG的文件名。我将JPG包含在一个名为Files的目录中,该目录位于我的源代码和类文件所在的主目录之外。我已将JPG文件设置为“内容”和“始终复制”

我只是在学习c,一直在努力在WPF中使用URI。我在谷歌上搜索了不少,但运气不太好

基本上,我尝试将BitmapImage对象作为属性存储在汽车对象中。然后,我想在WPF表单上的图像控件中显示BitmapImage

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

我有两种方法。首先,我从一个文本文件中预加载汽车数据,包括我要加载的JPG的文件名。我将JPG包含在一个名为Files的目录中,该目录位于我的源代码和类文件所在的主目录之外。我已将JPG文件设置为“内容”和“始终复制”。当我运行调试时,它会将文件目录和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;
所以…我不明白为什么第一种方法不起作用。我认为这和相对引用有关,但我不知道如何正确地使用语法。我尝试使用包:,,,我尝试添加组件,我尝试在包之前使用“@”。我似乎找不到简单的解释


道歉,如果这是直截了当的,但它正在做我的头!欣赏任何指针。

首先尝试使用图像文件的绝对路径加载图像文件。例如,如果图像存储在c:\projects\yourproject\files中,那么请尝试使用以下命令

BitmapImage myImage = new BitmapImage (new Uri("c:/projects/yourproject/files/carname.jpg", UriKind.Absolute);
如果有效,您将面临一个路径计算问题

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


Cheers

如果图像文件位于Visual Studio项目的“文件”文件夹中,则应将其生成操作设置为“资源”并将“复制到输出目录”设置为“不复制”,然后通过以下方式加载它们:


不需要将文件复制到任何地方。图像直接从程序集加载。

非常感谢!成功了。我让它使用完整路径,然后使用AppDomain.CurrentDomain.BaseDirectory。我知道这很简单!很好,尼克。但现在您对文件夹结构有依赖性,这可能并不理想。考虑在App.CONFIG上存储图像的路径并从那里加载。这样,如果您的用户决定要将图像移动到单独的服务器,您只需修改配置文件,系统就会继续工作。。不管怎样,我很高兴它对你有用
var image = new BitmapImage(new Uri("pack://application:,,,/Files/" + Car.Imagefilename));
Car.Image = image;
ImageControl.Source = image;