我在资源字典中定义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设计师中,我有我的期望。有红色文本的蓝色按钮。 但在运行时,两种样式都不会应用,按钮具有默认颜色。 我该如何解决这个问题?
答案 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。
它可能与它有关。