在我的应用程序中,我正在创建大量自定义控件,然后我在不同的窗口中使用它们。我的项目结构看起来像这样:
我正在创建存储在Controls文件夹中的类(控件)。如果我想在控件中使用图像,我会这样访问它:
new Uri("../Resources/my_image.png", UriKind.Relative)
有时候,我想在多个窗口中使用相同的控件,有时这些窗口存储在不同的文件夹中。如果我使用存储在另一个文件夹中的Window3中的控件,则不会显示图像。
如果我将Uri更改为:(在路径中添加另一个“go back”命令)
new Uri("../../Resources/my_image.png", UriKind.Relative)
图像正在Window3中显示,但它不会显示在Window1或Window2中。
有没有办法创建相对于主可执行文件的路径,而不是相对于显示控件的窗口?
编辑: 我忘了提一个重要的部分。因为在启动这个应用程序时我只是学习如何使用WPF,我搞砸了一件事。我的资源文件夹不在包含主可执行文件的文件夹中。
我的文件结构如下:
我试图使用每个人建议的路径:
new Uri("pack://application:,,,/../../my_image.png", UriKind.RelativeOrAbsolute)
但我得到例外:
找不到资源'my_image.png'。
我可以尝试重新定位Resources文件夹,但它会搞乱所有其他路径。有没有办法在“pack”uri的文件夹结构中“回”?如果没有,重新定位文件夹的最佳方法是什么,以便所有路径都不会搞砸?
答案 0 :(得分:3)
使用“pack”uri ...所以你会使用:
pack://application:,,,/Resources/my_image.png
所以这样:
new Uri("pack://application:,,,/Resources/my_image.png");
从任何Windows / Controls中引用您的“图像”。
如果您有其他“项目”/“程序集”......您希望能够引用该资源,请使用:
pack://application:,,,/AssemblyNameContainingResource;component/Resources/my_image.png
当您在Resource
文件夹中添加图片时......请务必使用Resource
作为Build Action
。
答案 1 :(得分:2)
资源文件包URI - 本地程序集
编译到本地的资源文件的包URI 程序集使用以下权限和路径:
Authority: application:///. Path: The name of the resource file, including its path relative to the root of the local assembly project folder.
以下示例显示了XAML资源文件的包URI 位于本地程序集的项目文件夹的根目录中:
包://应用:,,, / ResourceFile.xaml
以下示例显示了XAML资源文件的包URI 位于本地程序集的项目文件夹的子文件夹中:
包://应用:,,, /子文件夹/ ResourceFile.xaml
答案 2 :(得分:1)
简答:使用包URI表示法。
示例:强>
您的URI看起来类似于:pack://application:,,,/Resources/my_image.png
,无论您在XAML中的哪个位置使用它。
<强>文档强>
答案 3 :(得分:0)
要访问SubModuelA的资源文件而不是已启动的项目时,在SubModuelA的子视图中,例如SubModuleA的子模块中。 例如,资源文件的目录为StartApp / SubModuelA / Resource / Data / JsonData.json, 在SubModuelA的viewmodel中,其路径为 字符串jsonFile =“ ../../../ SubModuleA / Resource / Data / JsonData.json”
我已经对此进行了验证并将数据写入jsonFile