WPF: изменить стиль элемента в унаследованной теме - PullRequest
1 голос
/ 27 января 2011

Я хочу изменить стиль темы на унаследованный стиль (наследуется через на основе).Есть идеи?Это в основном для определения нескольких стилей для многосерийных диаграмм в wpf toolkit.Код выглядит следующим образом:

<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>

Я хочу установить columngrid в «стиле A» для использованиязадняя щетка, определенная в "стиле B"Я не люблю делать больше вещей в стиле B, так как многие из унаследованных стилей будут определены, просто меняя этот стиль потом.

1 Ответ

2 голосов
/ 29 января 2011

Вы тратите совершенно полезное свойство Background, которое уже доступно, и пытаетесь создать новое, которое служит той же цели. Поскольку вы переопределяете шаблон элемента управления, просто используйте Background для цели, для которой предназначен график. Вместо установки прозрачного в вашем стиле, позвольте вашему производному стилю установить или переопределить Background, а затем используйте {TemplateBinding Background} в шаблоне элемента управления, где вы в данный момент используете {StaticResource Backbrush}. Ваше другое использование {TemplateBinding Background} в элементе Grid, которое вы можете удалить, поскольку кажется очевидным, что вы намерены сделать фон сетки прозрачным.

...