通过basedon样式属性重写样式

本文关键字:样式 重写 属性 通过 basedon | 更新日期: 2023-09-27 17:53:26

我有一个按钮的基本样式:

<Style x:Key="ButtonStyle_base" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Name="grid" Margin="0,0,0,0">
                        <Rectangle Name="rectangle" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" >
                            <Rectangle.Effect>
                                <DropShadowEffect BlurRadius="3" Opacity="0.4" ShadowDepth="6"/>
                            </Rectangle.Effect>
                        </Rectangle>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True" />
                        <Trigger Property="IsDefaulted" Value="True" />
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

在网格中,我有一个矩形。为了使我的应用程序具有可皮肤性,我在另一个资源字典中放置了基于以下样式的样式:

<Style x:Key="ButtonStyle" BasedOn="{StaticResource ButtonStyle_base}">
        <Setter Property="Rectangle.Fill" >
            <Setter.Value>
                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                    <GradientStop Color="#FFFFFFFF" Offset="0.5" />
                    <GradientStop Color="#CCFFFFDD" Offset="1" />
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
    </Style>

我想要的是改变矩形的填充。这行不通。我该怎么做呢?

通过basedon样式属性重写样式

ButtonBackground属性绑定Fill,

<Style x:Key="ButtonStyle_base" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Name="grid" Margin="0,0,0,0">
                        <Rectangle Name="rectangle" HorizontalAlignment="Stretch"  Fill="{TemplateBinding Background}" VerticalAlignment="Stretch" >
                            <Rectangle.Effect>
                                <DropShadowEffect BlurRadius="3" Opacity="0.4" ShadowDepth="6"/>
                            </Rectangle.Effect>
                        </Rectangle>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True" />
                        <Trigger Property="IsDefaulted" Value="True" />
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

从你的派生样式设置背景,

<Style x:Key="ButtonStyle" BasedOn="{StaticResource ButtonStyle_base}">
        <Setter Property="Background" >
            <Setter.Value>
                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                    <GradientStop Color="#FFFFFFFF" Offset="0.5" />
                    <GradientStop Color="#CCFFFFDD" Offset="1" />
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
</Style>