WPF Button isPressed and isEnabled problem

25,091

I fixed it after studying the code at http://mark-dot-net.blogspot.com/2007/07/creating-custom-wpf-button-template-in.html...

This is what I ended up with, which works great.

<!-- Blue Button -->
<Style x:Key="BlueButton" TargetType="{x:Type Button}">
<Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border Name="border" 
                    BorderThickness="2"
                    Padding="4,2" 
                    BorderBrush="{DynamicResource BlueGradient2}"
                    CornerRadius="5" 
                    Background="{TemplateBinding Background}">
                    <Grid >
                    <ContentPresenter 
                                HorizontalAlignment="Center" 
                                VerticalAlignment="Center" 
                                Name="content"/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="{DynamicResource BlueGradient3}"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Background" Value="{DynamicResource DarkGradient1}"/>
                        <Setter Property="BorderBrush" Value="{DynamicResource BlueGradient3}"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background" Value="{DynamicResource DarkGradient1}"/>
                        <Setter Property="BorderBrush" Value="{DynamicResource BlueGradient1}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
    <Setter Property="Background" Value="{DynamicResource BlueGradient1}"/>
    <Setter Property="BorderBrush" Value="{DynamicResource BlueGradient2}"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="TextBox.TextAlignment" Value="Center"/>       
    <Setter Property="FontFamily" Value="Trebuchet MS"/>
    <Setter Property="FontSize" Value="15pt"/>
    <Setter Property="Effect" Value="{DynamicResource KioskStandardDropShadow}" />
</Style>
Share:
25,091
ocodo
Author by

ocodo

↘↓ ↘ ↘ ← ↙ ⤢↘ ↘← ↑ ↘← ↑⤡↙ → ↙ ↓↙↙ ↙ → ↗ ↙ ↘ ← ↙↙↘ ↙↘ ↙ ↑ ↘← ↘ ↑↕ ← ↓↓↑ ↙ ← ↘ ← ↙ ↕← ↗ ↔↙ ↗↓ ↑↑ →↖ ↙← ↓ ↘ → ↘ ↘ ↓↘← ↗ ↙↙ ↙ ↖ ↘ ←↓↙← ↑ ↑↑ ↑ → ↘ → ↙ ↘ ↙ ←↙ ↘ ↕ ↔ ↙↙ ← ↙ ⤡ ↑ ↘ ←↓↓↓ ↓↓↓ ↙↘ ↘→ ↘ ↙ ← ↑ ↓ ↘ → ↘ ↙ ← →↘ ↓ ↓ ↙← ↕← ↗ →↘ ↙← →↗ ↓ ↖← ↖ ↕ ↔ ↙ ↗↔ ↖ ↑↓ ↙↑ ↖← ↑↘ ↙ ↓ →↗→↖↑ ↑ ↑ ↗↖ ↑→ ↙↓ ↙ ↑ ↗ ↔ ↖↙←↙↓↖ ↗↔ ↕ ↑ → ↙ ↘ ←↗ →↖ ↘ ↕ ← ↖ ⤡ ↗ ← ↙ ↑ ↙ ↖ ↓↖← ↖ ↑ ↓ ↓↑↙ → ↘↑↓↖ ↗ ↙← ↑ ↙→ ↕ → ↖ ⤡ ↖ →↗ ↓ ↖ ↑ ↑ ↗↖

Updated on August 21, 2020

Comments

  • ocodo
    ocodo over 3 years

    Update: using Expression Blend 3

    I'm trying to style the IsPressed & IsEnabled(false) property triggers for a class of buttons in a WPF application.

    Here's a UserControl with a Button using the style...

    <UserControl
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        x:Class="Kiosk.ButtonTest"
        x:Name="UserControl">
    
        <Grid x:Name="LayoutRoot">
            <Button HorizontalAlignment="Left" Style="{DynamicResource BlueButton}" VerticalAlignment="Top" Width="155" Content="Button" Height="52.9"/>
        </Grid>
    </UserControl>
    

    And here's the style fragment...

       <!-- Blue Button -->
       <Style x:Key="BlueButton" TargetType="{x:Type Button}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="{DynamicResource BlueGradient3}"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Background" Value="{DynamicResource DarkGradient1}"/>
                <Setter Property="BorderBrush" Value="{DynamicResource BlueGradient3}"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" Value="{DynamicResource DarkGradient1}"/>
                <Setter Property="BorderBrush" Value="{DynamicResource BlueGradient1}"/>
            </Trigger>
        </Style.Triggers>
        <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
        <Setter Property="Background" Value="{DynamicResource BlueGradient1}"/>
        <Setter Property="BorderBrush" Value="{DynamicResource BlueGradient2}"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="TextBox.TextAlignment" Value="Center"/>       
        <Setter Property="FontFamily" Value="Trebuchet MS"/>
        <Setter Property="FontSize" Value="18"/>
        <Setter Property="Effect" Value="{DynamicResource KioskStandardDropShadow}" />
    </Style>
    <LinearGradientBrush x:Key="BlueGradient1" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF3FA2FD" Offset="0"/>
        <GradientStop Color="#FF014782" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="BlueGradient2" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF014782" Offset="0"/>
        <GradientStop Color="#FF3FA2FD" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="BlueGradient3" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF014782" Offset="1"/>
        <GradientStop Color="#FF0B2135" Offset="0"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="DarkGradient1" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF2A2A2A" Offset="0"/>
        <GradientStop Color="#FF474747" Offset="0.478"/>
        <GradientStop Color="#FF323232" Offset="0.487"/>
        <GradientStop Color="Black" Offset="1"/>
        <GradientStop Color="#FF282828" Offset="0.681"/>
    </LinearGradientBrush>
        <!-- Regular Drop Shadow --> 
        <DropShadowEffect x:Key="KioskStandardDropShadow" Opacity="0.6" BlurRadius="10" ShadowDepth="5" Direction="308"/>
    <!-- fragment end -->
    

    The Default and Mouse over changes work fine, but isEnabled false and isPressed true still show the Button default colors.

    What am I doing wrong?