在下面的代码中,为什么第一个示例未能将背景设置为蓝色,但是,第二个示例的工作方式可能正如人们所期望的那样——也就是说,将背景设置为蓝色?有趣的是,在第二个示例中应用样式时,即使 Style 中没有指定 BorderThickness,但属性值“3”也被拾取,可能是因为新的 Style 根本没有设置它。
代码 1:
<GroupBox Margin="4,12,4,4"
Grid.ColumnSpan="4"
Grid.Column="0"
Grid.Row="3"
Header="{x:Static res:UIResources.DepreciationText}"
BorderBrush="{DynamicResource MainControlBorderBrush}"
BorderThickness="3"
Background="Blue" />
代码 2:
<GroupBox Margin="4,12,4,4"
Grid.ColumnSpan="4"
Grid.Column="0"
Grid.Row="3"
Header="{x:Static res:UIResources.DepreciationText}"
BorderBrush="{DynamicResource MainControlBorderBrush}"
BorderThickness="3">
<GroupBox.Style>
<Style TargetType="GroupBox">
<Setter Property="Background"
Value="Blue" />
</Style>
</GroupBox.Style>
</GroupBox>
您可以从上述观察中推断出以下情况是正确的:
1) 一些 Style 被应用到 GroupBox 的更上层——甚至可能应用到 GroupBox 的某个基类,例如 Control,因为没有找到针对 GroupBox 的 Style 搜索。
2) 在控件实例上设置的属性不会覆盖以控件为目标的样式中设置的相同属性。
3) 除了使用 BasedOn 属性之外,没有办法增加继承的 Style。使用 BaseOn 属性意味着您必须知道要作为其基础的样式的键,除非如果您想将 BasedOn 与应用于类型的样式一起使用,您可以以某种方式指定 - 可能使用 BasedOn 中的类型名称?
任何人都可以确认或更正上述断言,以及他们是否正确解释了观察到的结果?