Nested Resource Dictionary in separate library

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-04 13:52:16

问题


My question is very similar to this one

I have a solution with a number of projects. The are two that are relevant: a class library that contains a WPF window and a project with all the WPF styles in it.

Class Library with the window in Project 1

The Window's merged dictionary is something like:

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

            //other styles here

The CommonStyle.xaml in Project 2:

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

That results in errors like:

{"Cannot locate resource 'components/type/checkbox.xaml'."}

However, if I create a CommonStyle.xaml in Project 1 and reference the same control styles from Project 2 then it works.

How do I make that highest level xaml file (CommonStyle.xaml) work from the Project 2?


回答1:


I am currently unable to test this, however I hope it should work.

Rather than a rooted path, use a relative path in Project 2, i.e.

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

You may also use .. as required to navigate up to a relative directory (depending upon the location of CommonStyle.xaml), e.g.

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

I believe when you use a rooted path (starting with /) it will look for CheckBox.xaml in the root of the project where you use CommonStyle.xaml rather than relative to the location of CommonStyle.xaml.

Additional Explanation

From you have described, it seems you have the following structure:

- Project 1
  - Window.xaml
- Project 2
  - CommonStyle.xaml
  - Components
    - Type
      - CheckBox.xaml

When CommonStyle.xaml refers to / it is normally referring to the root of Project 2, however when you merge this into Window.xaml the / would now refer to the root of Project 1, subsequently it is unable to locate Components/Type/CheckBox.xaml.

By removing the / it will now look for Components/Type/CheckBox.xaml relative to the location of CommonStyle.xaml which it is able to do.



来源:https://stackoverflow.com/questions/25023671/nested-resource-dictionary-in-separate-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!