【问题标题】:override style through basedon style property通过基于样式属性覆盖样式
【发布时间】:2014-03-26 12:42:40
【问题描述】:

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

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

我想要的是改变矩形的填充。它不起作用。我怎样才能做到这一点?

【问题讨论】:

    标签: c# wpf resources resourcedictionary


    【解决方案1】:

    ButtonBackground属性绑定填充,

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

    【讨论】:

    • 谢谢你的战利品!非常非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 2013-06-10
    • 2020-02-21
    • 1970-01-01
    • 2018-05-08
    • 2016-05-15
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多