将单独的XAML导入为ResourceDictionary并分配x:Key

我下载了Visual Studio图像库 ,我看到包含的图标以.XAML文件的forms提供矢量格式。 这是一个例子:

Add_16x.xaml

                   

我想将我想要在我的应用程序源中使用的所有图标xaml文件放在名为“Icons”的文件夹中,然后能够在其他地方IconDictionary.xaml一个名为IconDictionary.xaml的文件,该文件定义了一个包含MergedDictionariesResourceDictionary并在此MergedDictionaries希望能够以某种方式包含icon.xaml文件并为它们分配一个x:Key属性,以便我可以在整个应用程序中将它们称为静态资源。

是否可以使用此icon.xaml文件而无需修改.xaml文件本身?

我希望能够保留它们,但不幸的是,似乎我别无选择,只能将其内容复制到我的IconDictionary.xaml或编辑单个.xaml文件并将它们包含在带有x:KeyResourceDictionary x:Key我可以添加到MergedDictionaries x:Key


UPDATE

为了清楚起见,我希望我的IconDictionary.xaml看起来像这样:

      

是否可以使用此icon.xaml文件而无需修改.xaml文件本身?

我不相信。 虽然XAML看起来很像XML,并遵循许多XML规则,但XAML编译器似乎不允许通常用于将XML从一个文件导入另一个文件的DOCTYPEENTITY标记。 使用时,报告的第一个错误显示“此XML文档中禁止DTD” 。 如果没有提供DTD的能力,则无法声明实体,因此无法导入独立的XAML。

如果要直接使用生成的XAML文件,可以将该文件作为资源添加到项目中。 然后可以使用代码隐藏中的XamlReader.Load()加载资源数据,并在您需要的适当时间添加。

例如,假设您已将XAML文件复制到项目中名为“Resources”的文件夹,并将文件的“Build Action”设置“Resource” ,则可以编写这样的代码来检索对象:

 using (Stream stream = App.GetResourceStream( new Uri("pack://application:,,,/Resources/Add_16x.xaml")).Stream) { object o = XamlReader.Load(stream); } 

这将获得一个Stream对象,该对象表示已嵌入应用程序中的XAML文件数据,然后使用XamlReader.Load()方法加载XAML表示的WPF对象。

就个人而言,当我使用这些文件时,我只是将DrawingGroup元素从XAML文件复制/粘贴到我自己的资源XAML文件中。 无论如何,包装器( ViewboxRectangleDrawingBrush )都是多余的。 我真正需要的是DrawingGroup对象。

当我这样做时,我也删除了显式的语法,并直接包含DrawingGroup ,使XAML更简洁。 例如:

        

然后,您可以随意使用上述资源。 例如,WPF中的惯用方法是声明一个DataTemplate配置为以您想要的方式显示Drawing ,然后将给定的Drawing资源绑定为内容控件的内容。 例如:

        

其他地方:

  

(确保内容控件的样式,例如Button ,否则与您的Drawing资源兼容,即正确的大小等)

这个怎么样?

App.xaml中

        

并像这样使用它:

  

要么,

        

并像这样使用它: