我想将主题的样式更改为继承样式(通过基于继承)。有什么想法吗?这基本上是为wpf工具包中的多系列图表定义多个样式。代码如下:
<Style x:Key="A" TargetType="DVC:ColumnDataPoint">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DVC:ColumnDataPoint">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Opacity="0" x:Name="Root">
<Grid Background="{TemplateBinding Background}" Name="columngrid">
<Grid.Resources>
<Style x:Key="aquaboarder" TargetType="Border">
<Style.Resources>
<LinearGradientBrush x:Key="BackBrush" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#B211B9D8" Offset="0.1" />
<GradientStop Color="#FF0F56C7" Offset="0.9" />
</LinearGradientBrush>
</Style.Resources>
<Setter Property="Background" Value="{StaticResource BackBrush}"/>
</Style>
</Grid.Resources>
<Border Name="columnBorder" BorderBrush="Transparent" BorderThickness="1" CornerRadius="20,20,0,0" Style="{StaticResource aquaboarder}">
</Border>
</Grid>
<ToolTipService.ToolTip>
<ContentControl Content="{TemplateBinding FormattedDependentValue}" />
</ToolTipService.ToolTip>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
继承的风格如下:
<Style x:Key="B" BasedOn="{StaticResource A}" TargetType="DVC:ColumnDataPoint">
<Style.Resources>
<LinearGradientBrush x:Key="BackBrush" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#B24DE509" Offset="0.1" />
<GradientStop Color="#FF238910" Offset="0.9" />
</LinearGradientBrush>
</Style.Resources>
</Style>
我想在“样式A”中设置 columngrid ,以使用“样式B”中定义的背景。我不喜欢在样式B中做更多的东西,因为我会定义许多继承的样式,然后改变这种风格。
答案 0 :(得分:2)
您正在浪费已经可用的完全有用的Background
属性,并尝试创建一个用于相同目的的新属性。由于您要覆盖控件模板,因此只需将Background
用于图表所需的目的。让您的派生样式设置或覆盖Background
,然后在控件模板中使用{TemplateBinding Background}
,而不是在您的样式中将其设置为透明,而是使用{StaticResource Backbrush}
。您可以删除{TemplateBinding Background}
元素上的Grid
的其他用法,因为您的意图似乎是网格背景将是透明的。