I'm creating custom control - image button. The purpose is to make button without any background or border, only 3 images (normal state, pressed and mouseover). When using it - all 3 images should be bounded. I get a bit code from here but sources are peramanent. My code is sth like that:
Generic.xaml:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:JoesControls">
<Style TargetType="{x:Type local:ImageButton}" x:Key="styledImageButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ImageButton}">
<Grid
Margin="{TemplateBinding Control.Padding}"
HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"
>
<Image Name="Normal" Source="{TemplateBinding NormalSource}"/>
<Image Name="Pressed" Source="{TemplateBinding PressedSource}" Visibility="Hidden"/>
<Image Name="Over" Source="{TemplateBinding MouseOverSource}" Visibility="Hidden"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="Over" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
And ImageButton.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace JoesControls
{
public class ImageButton : Button
{
static ImageButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ImageButton), new FrameworkPropertyMetadata(typeof(ImageButton)));
}
#region NormalSourceProperty
public static readonly DependencyProperty NormalSourceProperty =
DependencyProperty.Register("NormalSource", typeof(ImageSource), typeof(ImageButton),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.AffectsRender |
FrameworkPropertyMetadataOptions.AffectsParentMeasure));
public ImageSource NormalSource
{
get { return (ImageSource)GetValue(NormalSourceProperty); }
set
{
SetValue(NormalSourceProperty, value);
}
}
#endregion // NormalSource
#region PressedSourceProperty
public static readonly DependencyProperty PressedSourceProperty =
DependencyProperty.Register("PressedSource", typeof(ImageSource), typeof(ImageButton),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.AffectsRender |
FrameworkPropertyMetadataOptions.AffectsParentMeasure));
public ImageSource PressedSource
{
get
{
if (PressedSource == null || PressedSource.ToString() == String.Empty)
SetValue(PressedSourceProperty, NormalSource);
return (ImageSource)GetValue(PressedSourceProperty);
}
set
{
SetValue(PressedSourceProperty, value);
}
}
#endregion // PressedSource
#region MouseOverSourceProperty
public static readonly DependencyProperty MouseOverSourceProperty =
DependencyProperty.Register("MouseOverSource", typeof(ImageSource), typeof(ImageButton),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.AffectsRender |
FrameworkPropertyMetadataOptions.AffectsParentMeasure));
public ImageSource MouseOverSource
{
get
{
if (MouseOverSource == null || MouseOverSource.ToString() == String.Empty)
SetValue(MouseOverSourceProperty, NormalSource);
return (ImageSource)GetValue(MouseOverSourceProperty);
}
set
{
SetValue(MouseOverSourceProperty, value);
}
}
#endregion // OverSource
}
}
It compiles without error but clearly doesn't work. Source are not bound. I guess binding on source are set not properly, but I've been trying for some time, googling for it but I stucked. I appreciate any help.
Thanks