嵌套资源字典在单独的库中

时间:2014-07-29 19:44:55

标签: wpf .net-4.0 resourcedictionary mergeddictionaries

我的问题与此one

非常相似

我有一个包含许多项目的解决方案。两个是相关的:一个包含WPF窗口的类库和一个包含所有WPF样式的项目。

带有项目1中窗口的类库

Window的合并字典类似于:

  <ResourceDictionary.MergedDictionaries>
       <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/CommonStyle.xaml"/>
  </ResourceDictionary.MergedDictionaries> 

            //other styles here

项目2 中的CommonStyle.xaml:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Components/Type/CheckBox.xaml"/>
</ResourceDictionary.MergedDictionaries>

导致错误,如:

  

{“无法找到资源'组件/类型/ checkbox.xaml'。”}

但是,如果我在Project 1中创建一个CommonStyle.xaml并从Project 2引用相同的控件样式,那么它可以工作。

如何从项目2中创建最高级别的xaml文件(CommonStyle.xaml)?

1 个答案:

答案 0 :(得分:3)

我目前无法对此进行测试,但我希望它能够正常运行。

而不是根路径,使用项目2中的相对路径,即

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Components/Type/CheckBox.xaml"/>
</ResourceDictionary.MergedDictionaries>

您也可以根据需要使用..导航到相对目录(取决于CommonStyle.xaml的位置),例如

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="../Components/Type/CheckBox.xaml"/>
</ResourceDictionary.MergedDictionaries>

我相信当您使用带根路径(从/开始)时,它会在您使用CheckBox.xaml的项目根目录中查找CommonStyle.xaml,而不是相对于CommonStyle.xaml的位置- Project 1 - Window.xaml - Project 2 - CommonStyle.xaml - Components - Type - CheckBox.xaml

附加说明

根据您的描述,您似乎有以下结构:

CommonStyle.xaml

/引用Window.xaml时,它通常是指项目2的根,但是当您将其合并到/时,Components/Type/CheckBox.xaml现在将引用根项目1,随后无法找到/

通过删除Components/Type/CheckBox.xaml,它现在会查找CommonStyle.xaml相对于其能够执行的{{1}}位置。