【问题标题】:WPF BasedOn StylingWPF 基于样式
【发布时间】:2011-03-11 15:46:32
【问题描述】:

嘿,我正在尝试在 WPF 中设置按钮样式。我有一个基本风格:

    <Style x:Key="buttonStyle" TargetType="{x:Type ButtonBase}">
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate x:Name="ButtonBaseControlTemplate" TargetType="{x:Type ButtonBase}">
                <Grid SnapsToDevicePixels="True">
                    <Border x:Name="Bd" Background="#9BC4E2" BorderBrush="Black"
                            BorderThickness="3,3,3,3" CornerRadius="7,7,7,7" Padding="5,5,5,5">
                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" x:Name="Content"
                                      ContentSource="Content"
                                      RecognizesAccessKey="True" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                </Grid>
             <-- Removed triggers here -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

但我也需要将它用于切换按钮,只是为了更改 IsChecked 背景颜色。但是当我这样尝试时,我无法访问边框来设置背景:

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource buttonStyle}">
</Style>

<Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource buttonStyle}">
    <Style.Triggers>
        <Trigger Property="IsChecked" Value="True">
            <Setter Property="Background"  Value="White"/> <-- Need to specify target name of the border here somehow -->
        </Trigger>
    </Style.Triggers>
</Style>

有什么建议吗? ta

【问题讨论】:

    标签: c# .net wpf styles


    【解决方案1】:

    这几乎就是 TemplateBinding 的设计目的

    http://devlicio.us/blogs/christopher_bennage/archive/2008/07/04/templatebinding-a-bridge-between-styles-and-templates.aspx

    将Border.Background 属性更改为

    Background="{TemplateBinding Background}"
    

    并将这个 Setter 添加到您的 buttonStyle 样式中

    <Setter Property="Background" Value="#9BC4E2" />
    

    然后你可以像这样声明你的ToggleButtons

    <ToggleButton Content="ToggleButton" Background="Green" />
    

    【讨论】:

    • 这很好,谢谢,我们有一个可行的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多