WPF:更改继承主题中元素的样式

时间:2011-01-27 11:21:11

标签: wpf xaml wpftoolkit charts

我想将主题的样式更改为继承样式(通过基于继承)。有什么想法吗?这基本上是为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中做更多的东西,因为我会定义许多继承的样式,然后改变这种风格。

1 个答案:

答案 0 :(得分:2)

您正在浪费已经可用的完全有用的Background属性,并尝试创建一个用于相同目的的新属性。由于您要覆盖控件模板,因此只需将Background用于图表所需的目的。让您的派生样式设置或覆盖Background,然后在控件模板中使用{TemplateBinding Background},而不是在您的样式中将其设置为透明,而是使用{StaticResource Backbrush}。您可以删除{TemplateBinding Background}元素上的Grid的其他用法,因为您的意图似乎是网格背景将是透明的。