Change Opacity of Border on MouseOver
The Problem
Recently I was looking for a way of changing the opacity of a Border control when the user mouse’s over it, and re-setting the opacity when the mouse leaves. I originally wanted to do it using VisualStateManagers but since there is no ControlTemplate this won’t work.
The Solution
The solution that I came up with (not necessarily the best but it works!) was to create a new class that inherits from the [Behavior
The Code
First I created a new class that inherits from Behavior
using System.Windows;
using System.Windows.Input;
using System.Windows.Interactivity;
namespace TheGrayZone.Behaviours
{
public class OpacityHoverBehaviour : Behavior<UIElement>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.MouseEnter += new MouseEventHandler(AssociatedObject_MouseEnter);
this.AssociatedObject.MouseLeave += new MouseEventHandler(AssociatedObject_MouseLeave);
}
protected override void OnDetaching()
{
base.OnDetaching();
this.AssociatedObject.MouseEnter -= new MouseEventHandler(AssociatedObject_MouseEnter);
this.AssociatedObject.MouseLeave -= new MouseEventHandler(AssociatedObject_MouseLeave);
}
private void AssociatedObject_MouseLeave(object sender, MouseEventArgs e)
{
this.AssociatedObject.Opacity = 0.6;
}
private void AssociatedObject_MouseEnter(object sender, MouseEventArgs e)
{
this.AssociatedObject.Opacity = 0.8;
}
}
}
Then in the UserControl containing the Border element use the following XAML. You need to include the System.Windows.Interactivity namespace and the namespace where your behaviour was declared.
<UserControl
...
xmlns:behaviour="clr-namespace:TheGrayZone.Behaviours"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
<Border Style="{StaticResource BorderStyle}">
<TextBlock Foreground="White" Text="Some Text"/>
<i:Interaction.Behaviors>
<behaviour:OpacityHoverBehaviour/>
</i:Interaction.Behaviors>
</Border>
Finally I’ve defined the following style referenced in the above xaml.
<Setter Property="CornerRadius" Value="5,5,5,5"/>
<Setter Property="Background" Value="Black"/>
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="50"/>
<Setter Property="Opacity" Value="0.6"/>