当<resourcedictionary>同时具有直接资源和合并资源时,为什么找不到资源?</resourcedictionary>

时间:2012-07-30 04:15:08

标签: wpf

文件app.xaml

<Application.Resources>
    <ResourceDictionary>
        <SolidColorBrush x:Key="appBrush" Color="Red"/>

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary  Source="Dictionary1.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

File Dictionary1.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ControlTemplate x:Key="ct">
        <Rectangle Fill="{StaticResource appBrush }"/>
    </ControlTemplate>
</ResourceDictionary>

然后MainWindow使用定义的模板。

<Control Template="{StaticResource ct}"/>

运行。它说无法找到appBrush。有什么问题?

注意,将StaticResource更改为DynamicResource肯定会让它工作。但是迫使我做出改变的原因是什么?

1 个答案:

答案 0 :(得分:0)

将您的App.xaml更改为此,它将起作用:

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary>
           <SolidColorBrush x:Key="appBrush" Color="Red"/>
        </ResourceDictionary>
        <ResourceDictionary  Source="Dictionary1.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>

我认为这与资源如何合并在一起有关。在这些类型的情况下,我总是使用Brushes.xaml资源字典来定义我的所有画笔,并将其合并到任何其他资源字典之前。