全局样式在单独的程序集中

时间:2012-08-30 10:45:20

标签: wpf wpftoolkit wpf-4.0

对于我的应用程序主题,我创建了一个单独的类库MyApp.Themes.dll。 在这个库的根文件夹中,我有Standard.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary 
      Source="pack://application:,,,/MyApp.Themes;component/Standard/Accordion.xaml"/>
  </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

在标准文件夹中,我有Accordion.xaml:

<ResourceDictionary xmlns:layoutPrimitivesToolkit="..."
                    xmlns:layoutToolkit="..."
                    ...>
  <!--  layoutPrimitivesToolkit:AccordionButton  -->
  <Style TargetType="layoutPrimitivesToolkit:AccordionButton">
    ...
  </Style>

  ...
</ResourceDictionary>

是WPF Toolkit Accordion控件的默认样式,但该样式除外 AccordionItem被修改为将背景设置为透明(而不是蓝色,这是一个已知的错误)。

对于两个xaml文件,Build Action设置为“Resource”。 现在,在MyApp WPF项目中引用MyApp.Themes库之后,在App.xaml中我写了以下内容:

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary             
        Source="pack://application:,,,/MyApp.Themes;component/Standard.xaml" />
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>

它不起作用(没有错误;只是样式未应用)。如果我直接在App.xaml中复制并粘贴Accordion.xaml样式,那么它可以正常工作。 有人建议添加虚拟资源字典,所以我在MergedDictionaries结束标记后在App.xaml中添加了以下内容:

<Style TargetType="{x:Type layoutToolkit:AccordionItem}" /> 

同样,它不起作用。有人可以帮我解决这个问题吗?顺便说一下,我没有尝试过一种方法 其他人建议 - 使用basedOn。如果我必须这样做,我想在MyApp中做。 因为它使得在App.xaml中使用主题更好。先感谢您。

UPDATE1:如果我将Accordion.xaml内容直接复制并粘贴到Standard.xaml

,它就有效

UPDATE2:我在Standard.xaml中尝试了本地程序集资源文件URI(http://msdn.microsoft.com/en-us/library/aa970069.aspx):

<ResourceDictionary Source="pack://application:,,,/Standard/Accordion.xaml"/>

它抛出一个错误,说未找到标准/ accordion.xaml。

1 个答案:

答案 0 :(得分:1)