WPF BasedOn Styling - PullRequest
       22

WPF BasedOn Styling

3 голосов
/ 11 марта 2011

Привет, я пытаюсь стилизовать кнопки в 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>

Есть предложения?та

1 Ответ

9 голосов
/ 11 марта 2011

Это почти то, для чего предназначена 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 в свой стиль кнопки

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

Тогда вы можете объявить свои ToggleButton вот так

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