在我的应用程序中,我使用ShinyBlue.xaml资源字典,其中包含GroupBox
控件的代码:
<Style TargetType="{x:Type GroupBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupBox}">
<Grid SnapsToDevicePixels="true">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="6" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="6" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="6" />
</Grid.RowDefinitions>
<Border Grid.ColumnSpan="4" Grid.RowSpan="4"
Background="{DynamicResource LightBrush}"
CornerRadius="4,4,4,4"
BorderThickness="1,1,1,1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这些风格适用于所有应用。但在其中一种表单中,我想将Background
更改为Transparent
。我想只覆盖Background
属性,但它不起作用
<Style TargetType="GroupBox" BasedOn="{StaticResource {x:Type GroupBox}}">
<Setter Property="Background" Value="Transparent"/>
</Style>
上面的代码无效。
如何更改特定表单中的GroupBox
Background
?
答案 0 :(得分:0)
您的ControlTemplate实际上并不使用Background属性,但它为Border的Background属性(即{DynamicResource LightBrush}
)指定了一个具体值。现在,当您在本地设置Background属性时,这没有任何效果,因为Border仍然使用LightBrush
资源
您必须使用TemplateBinding
来使控件中显示正确的背景,如下所示:
<Style TargetType="{x:Type GroupBox}">
<!-- set default value for the template -->
<Setter Property="Background" Value="{DynamicResource LightBrush}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupBox}">
<Grid SnapsToDevicePixels="true">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="6" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="6" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="6" />
</Grid.RowDefinitions>
<!-- Note the new TemplateBinding for the Background property! -->
<Border Grid.ColumnSpan="4" Grid.RowSpan="4" Background="{TemplateBinding Background}" CornerRadius="4,4,4,4" BorderThickness="1,1,1,1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这样,Border实际上使用了GroupBox的Background属性。为了使它默认使用LightBrush
,我添加了一个Setter,它定义了Background属性的默认值。然后可以通过在GroupBox上本地设置Background属性来覆盖此值。