关于 c#:从单独的项目中从 Blend 加载内容图像

Loading Content images from Blend from separate project

我有一个包含 5 个项目的 VS2010 解决方案。其中两个项目被称为:

我的资源
应用

Application 项目包含应用程序运行所需的所有视图和视图模型,Resources 项目包含用于主题和皮肤设计的所有图像、资源字典等。

我在资源中设置图像的方式是,我将它们的构建操作设置为内容,并将复制设置为始终复制。在我的应用程序项目中,我使用包 URI 引用这些文件。示例:

"pack://siteoforigin:,,,/Themes/DefaultTheme/BackgroundImage.png"

这对我来说很好。由于我使用的是 siteoforigin://.

,因此主题文件夹及其所有子文件夹已正确复制到正确的文件夹中

但是,这会破坏可混合性。当我在 Blend 4 中加载项目时,出现错误。

如果我使用 siteoforigin,Blend 会尝试从 blend.exe 的执行文件夹中加载图像(在这种情况下,C:\\\\\\\\Program Files\\\\\\\\Microsoft Expression\\\\\\\\Blend 4 Beta\\\\ \\\\Themes\\\\\\\\Default_Theme\\\\\\\\BackgroundImage.png")

如果我将包 URI 更改为以下内容:

pack://application:,,,/IQ.IQKiosk.Resources;component/Themes/DefaultTheme/BackgroundImage.png

它会尝试在"themes/default_theme/backgroundimage.png"中查找图像

如果我尝试:

/MyResources;component/Themes/DefaultTheme/BackgroundImage.png

它会尝试在 "C:\\\\\\\\MyResources;component\\\\\\\\Themes\\\\\\\\DefaultTheme\\\\\\\\BackgroundImage.png"

中查找图像

如果我尝试:

/Themes/DefaultTheme/BackgroundImage.png

它尝试在 "C:\\\\\\\\Themes\\\\\\\\DefaultTheme\\\\\\\\BackgroundImage.png" 中查找图像。

所以现在我被困住了。我不确定如何引用我的图像而不必将它们嵌入到资源项目中,而且我无法对目录进行硬编码,因为我的其他同事也将项目放在不同的文件夹中。

我试图想出一种方法来获取文件正确位置的正确 URI(相对于 .sln 文件会很棒),或者将文件复制到 blend 编译和执行项目的位置。唉,我无法弄清楚如何。

有人知道加载这些图片的正确方法吗?


我想通了。我没有使用包 URI,而是使用了

new Uri(Environment.CurrentDirectory +"\\\\Themes\\\\DefaultTheme\\\\BackgroundImage.png")

它找到了正确的文件夹,因为 Evironment.CurrentDirectory 给了我正确的 bin 文件夹,我的主题被复制到。

嘘!