Skip to content

Instantly share code, notes, and snippets.

@Platonenkov
Created May 8, 2021 16:30
Show Gist options
  • Save Platonenkov/930cbedc024b414c96be9917ed4a3b14 to your computer and use it in GitHub Desktop.
Save Platonenkov/930cbedc024b414c96be9917ed4a3b14 to your computer and use it in GitHub Desktop.
Toggle Hover Button
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:p="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
xmlns:s="clr-namespace:System;assembly=mscorlib">
<DropShadowEffect x:Key="Shadow" p:Freeze="True"/>
<ScaleTransform x:Key="Scale1.1" ScaleX="1.1" ScaleY="1.1" p:Freeze="True"/>
<ScaleTransform x:Key="Scale0.9" ScaleX="0.9" ScaleY="0.9" p:Freeze="True"/>
<ScaleTransform x:Key="Scale0.7" ScaleX="0.7" ScaleY="0.7" p:Freeze="True"/>
<SolidColorBrush x:Key="DarkGrayBrush" Color="DarkGray" p:Freeze="True"/>
<SolidColorBrush x:Key="BorderBrush" Color="#EEE" p:Freeze="True"/>
<SolidColorBrush x:Key="TransparentBrush" Color="Transparent" p:Freeze="True"/>
<RotateTransform x:Key="Rotate20" Angle="20" p:Freeze="True"/>
<ControlTemplate x:Key="HoverButtonControlTemplate" TargetType="{x:Type ButtonBase}">
<Border x:Name="TemplateBorder" Background="{StaticResource TransparentBrush}"
RenderTransformOrigin="0.5,0.5"
BorderBrush="{StaticResource BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{StaticResource DarkGrayBrush}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsEnabled" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Effect" Value="{StaticResource Shadow}"/>
<Setter Property="RenderTransform" TargetName="TemplateBorder" Value="{StaticResource Scale1.1}"/>
</MultiTrigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="RenderTransform" TargetName="TemplateBorder" Value="{StaticResource Scale0.9}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style TargetType="ButtonBase" x:Key="HoverButton">
<Setter Property="Margin" Value="2"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FontFamily" Value="Tahoma"/>
<Setter Property="Template" Value="{StaticResource HoverButtonControlTemplate}"/>
</Style>
<Style TargetType="{x:Type ToggleButton}" x:Key="ToggleHoverButton" BasedOn="{StaticResource HoverButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="TemplateBorder" Background="{StaticResource TransparentBrush}"
RenderTransformOrigin="0.5,0.5"
BorderBrush="{StaticResource BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{StaticResource DarkGrayBrush}"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Effect" Value="{StaticResource Shadow}"/>
<Setter Property="RenderTransform" TargetName="TemplateBorder" Value="{StaticResource Rotate20}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsEnabled" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Effect" Value="{StaticResource Shadow}"/>
<Setter Property="RenderTransform" TargetName="TemplateBorder" Value="{StaticResource Scale1.1}"/>
</MultiTrigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="RenderTransform" TargetName="TemplateBorder" Value="{StaticResource Scale0.7}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
@Platonenkov
Copy link
Author

Toggle hover button

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment