使用WPF自定义控件库(.NET Framework)中的普通WPF项目中的App.xaml

我有一个带有App.xaml (不是资源字典)的WPF项目,其中包含一些材料设计和ViewModelLocator(MVVM),如下所示:

       <!--   -->                                     

当我在WPFProject中创建一个Window时,它工作得很好。

但我也有一个WPF Custome Library项目。 如何从我的自定义WPF项目中的WPFProject访问App.xaml。

这是Custom WPF Library项目中的Window.xaml:

    

定位器和MaterialDesign的内容无法解析。 有任何想法吗? 或者这甚至可能吗?

TL; DR:我在GitHub上举了一个例子


编辑:一个不同的GitHub用户在这个主题上发表了一篇不错的文章: 文章 。


问题

有两个项目,您希望在两者的设计器中显示样式。 概括:

  • WpfApplication项目(WindowsApplication的输出类型)
  • CustomControls项目(ClassLibrary的输出类型)

一个办法

我看过post建议共享App.xaml文件。 根据完成的方式,可能会创建循环依赖项,或者在尝试强制类库包含ApplicationDefinition时遇到问题。 所以相反,我建议你将你的造型分成第三个项目。 您的解决方案结构现在看起来像:

  • WpfApplication项目(WindowsApplication的输出类型)
  • CustomControls项目(ClassLibrary的输出类型)
  • StylesProject项目(ClassLibrary的输出类型)

要使这些样式出现在CustomControls项目的设计视图中并由WpfApplication使用

  1. 与往常一样,在进行更改之前备份您的解决方案(以防出现问题)。
  2. StylesProject中 ,创建一个新的ResourceDictionary。 这将是合并所有其他样式和资源的字典,因此请将其命名为适当的名称。
  3. 将您在App.xaml中定义的所有样式相关资源剪切并粘贴到新资源字典中。
  4. WpfApplication项目中,在App.xaml文件中引用新的资源字典。 您的应用程序现在看起来应该像您开始进行更改之前那样。
  5. CustomControls项目中,在Properties文件夹下创建一个名为DesignTimeResources.xaml的新ResourceDictionary。
  6. 构建解决方案。 注意:您实际上只需要在此时构建CustomControls项目。
  7. 您现在必须编辑CustomControls csproj。 注意:您可能必须从Visual Studio卸载项目才能执行此操作。
  8. CustomControls.csproj ,搜索DesignTimeResources.xaml 。 你应该找到一个如下所示的块:
  Designer MSBuild:Compile  
  1. 使用以下内容替换步骤8中的块:
  MSBuild:Compile Designer true  
  1. 现在重新加载/构建CustomControls项目。
  2. StylesProject中的ResourceDictionary引用添加到刚刚创建的DesignTimeResources.xaml文件中。
  3. 重建您的解决方案。

您现在应该在CustomControls项目的设计器中看到您的样式!