与资源字典共享项目(xaml)

我正在寻找一种在项目之间共享ResourceDictionary的方法。

向共享项目添加新项目不提供资源字典。 它可以在其他(主)项目中创建并拖动。 但后来我无法将其构建选项更改为Page

在此处输入图像描述

想法是加载这样的资源字典

 var dictionary = new ResourceDictionary(); dictionary.Source = new Uri("/WpfApplication91;component/Dictionary2.xaml", UriKind.Relative); 

这显然是失败的

PresentationFramework.dll中出现“System.IO.IOException”类型的exception,但未在用户代码中处理

附加信息:找不到资源’dictionary2.xaml’。

有任何想法吗?

可以手动编辑共享项目以设置资源字典的构建操作。

共享项目包含Project.shprojProject.projitems文件,打开第二个并在那里找到字典:

    

之后添加

   MSBuild:Compile Designer   

对于包含字典的WPF项目,它是来自普通csproj的复制/粘贴内容。

似乎工作,但是当项目加载到Visual Studio时,此构建操作不可见。 将文件添加到共享项目不会影响此手动更改。

现在我可以拥有包含资源字典的共享项目,耶!

资源字典可以合并到应用程序字典中,如果它位于项目的根目录中(在xaml设计器中用作静态/动态资源):

         

和/或手动加载,例如使用此包Uri :

 var dictionary = new ResourceDictionary() { Source = new Uri("pack://application:,,,/FlexProperty.xaml"), }; 

我遇到了同样的问题。 有一个解决方案可以将Xaml包含在共享项目中,而不需要直接编辑.projitems文件。

您只需将Xamarin添加到Visual Studio安装中即可。 (我在VS Community 2015上做过。)

您现在可以通过常用的Visual Studio对话框添加xaml类型: 添加资源字典

并且可以使用正确的构建操作: 建立行动

共享项目中的Xaml现在可以按预期编译和运行。

(据推测,这是支持Xamarin Forms ,但它适用于任何xaml文档。)

此问题是您正在放置应用程序名称。 您需要项目名称。 下面是如何在XAML和代码中执行此操作

        

要么

 var dictionary = new ResourceDictionary(); dictionary.Source = new Uri("/SharedProject1;component/Dictionary2.xaml", UriKind.Relative);