WPF - 在字典中定义的混合样式与父控件中定义的样式

时间:2010-09-23 13:19:06

标签: c# .net wpf xaml

我在资源字典中定义Button控件的自定义外观:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Style TargetType="Button" x:Key="BaseButtonStyle">
    <Setter Property="Background" Value="Blue"/>
  </Style>
</ResourceDictionary>

然后我尝试在按钮所在的位置更改窗口中的样式。

<Window.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="Dictionary.xaml"/>
      <ResourceDictionary>
        <Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
          <Setter Property="Foreground" Value="Red"/>
        </Style>
      </ResourceDictionary>
      </ResourceDictionary.MergedDictionaries>   
    </ResourceDictionary>
</Window.Resources>

在WPF设计师中,我有我的期望。有红色文本的蓝色按钮。 但在运行时,两种样式都不会应用,按钮具有默认颜色。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

以下一项有效。我刚刚将Style移出MergedDictionaries并将其放在外部ResourceDictionary上。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>

        <Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </ResourceDictionary>
</Window.Resources>

在您的原始XAML中,我不确定为什么设计器能够正确呈现它而WPF运行时没有。 MSDN documentation虽然说:

合并的ResourceDictionary在标记中没有在其中定义的资源元素。相反,合并的字典是一个ResourceDictionary,没有定义标记子元素(或者没有通过代码添加元素),但是为Source指定了一个URI。

它可能与它有关。