如何从外部程序集引用XAML DictionaryResource?

时间:2011-11-30 17:42:47

标签: .net wpf xaml user-controls wpf-controls

我是WPF世界的Nubie。 我刚刚开始沉浸其中。

我有一个问题,我正试图弄清楚使用ResourceDictionary和Merged Dictionaries。

我已经将WPF示例应用程序转换为类库。 在我正在尝试创建的用户控件库中包含/引用新转换的程序集。 转换后的程序集包含在包含我的用户控件库(dll)项目的解决方案中的项目中。

我能够成功转换它并除去一些问题之外的所有错误 使用ResourceDictionary。

这就是违规的XAML:

<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/ConvertedAppPath/Dictionaries/Brushes.xaml" />
                <ResourceDictionary Source="/ConvertedAppPath/Dictionaries/Styles.xaml" />
<ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

原始WPF应用程序在程序集中包含多个Resource Dictionary项。

当我转换为类库时,我在资源字典上收到以下错误消息:

错误21查找资源字典“/ConvertedAppPath/Dictionaries/Brushes.xaml”时发生错误。 C:\ MyExplicitPath \ WPFUserControls \ DynamicDataChart.xaml 15 17 WPFUserControls 错误22查找资源字典“/ConvertedAppPath/Dictionaries/Styles.xaml”时发生错误。 C:\ MyExplicitPath \ WPFUserControls \ DynamicDataChart.xaml 15 17 WPFUserControls

所以,我想也许我需要ResourceDictionaries的相对路径。

<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../ConvertedAppPath/Dictionaries/Brushes.xaml" />
                <ResourceDictionary Source="../ConvertedAppPath/Dictionaries/Styles.xaml" />
<ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

我在XAML编辑器中收到以下错误消息:

文件“../ConvertedAppPath/Dictionaries/Brushes.xaml”不是项目的一部分,或者它的Build Action属性未设置为“Resource”。

我真的很想理解这一点,所以我有几个问题:

1)如何清除它以消除错误?

2)我是否需要在“Source”中明确设置装配位置?

3)“来源”属性的所有部分是什么?它们的真正含义是什么?

4)为什么第二条错误消息在编译时没有显示,但只在XAML编辑器中可见?

感谢您的回应和努力, JohnWPFNewB

1 个答案:

答案 0 :(得分:0)

确保'/ConvertedAppPath/Dictionaries/Brushes.xaml'属性设置'始终复制'

因为当您运行项目时,Brushes.xaml应该使用yourproject.exe复制到同一目录,与xaml中给出的路径相同(/ConvertedAppPath/Dictionaries/Brushes.xaml)