WPFコントロールライブラリ:画像ボタンのパッケージ
20370 ワード
需要:多くの場合、インタフェースのボタンに画像を貼る必要があります.一般的には:
1.ボタンは正常な状態にあり、ボタンには背景図Aがある
2.マウスがボタンの上に移動した状態で、ボタンに背景図Bがある
3.マウスクリックボタンの状態、ボタンに背景図Cがある
4.ボタンは使用不可状態であり、ボタンは背景図Dを有する
実現すれば、間違いなく、難しくない.しかし、過程は煩雑だ.ここではこのプロセスを新しいコントロールクラスにカプセル化します:ImageButton
ImageButtonには、上のA、B、C、Dの4つの背景図のパスに対応する4つの属性(バインドサポート)があります.
次に、ボタンのStyleを書き直します.Styleはリソース辞書に保存されます.
次に、コンストラクション関数でボタンのStyleを書き上げたStyleに変更します.
このようなパッケージ化により、画像ボタンの使用が非常に便利になります.
ソースコードダウンロードアドレス:(ポイント不要)http://download.csdn.net/detail/lyclovezmy/7356841
1.ボタンは正常な状態にあり、ボタンには背景図Aがある
2.マウスがボタンの上に移動した状態で、ボタンに背景図Bがある
3.マウスクリックボタンの状態、ボタンに背景図Cがある
4.ボタンは使用不可状態であり、ボタンは背景図Dを有する
実現すれば、間違いなく、難しくない.しかし、過程は煩雑だ.ここではこのプロセスを新しいコントロールクラスにカプセル化します:ImageButton
ImageButtonには、上のA、B、C、Dの4つの背景図のパスに対応する4つの属性(バインドサポート)があります.
#region
/// <summary>
///
/// </summary>
public string NormalBackgroundImage
{
get { return ( string ) GetValue ( NormalBackgroundImageProperty ); }
set { SetValue ( NormalBackgroundImageProperty, value ); }
}
/// <summary>
/// ,
/// </summary>
public string MouseoverBackgroundImage
{
get { return ( string ) GetValue ( MouseoverBackgroundImageProperty ); }
set { SetValue ( MouseoverBackgroundImageProperty, value ); }
}
/// <summary>
/// ,
/// </summary>
public string MousedownBackgroundImage
{
get { return ( string ) GetValue ( MousedownBackgroundImageProperty ); }
set { SetValue ( MousedownBackgroundImageProperty, value ); }
}
/// <summary>
///
/// </summary>
public string DisabledBackgroundImage
{
get { return ( string ) GetValue ( DisabledBackgroundImageProperty ); }
set { SetValue ( DisabledBackgroundImageProperty, value ); }
}
#endregion
#region
/// <summary>
/// ( )
/// </summary>
public static readonly DependencyProperty NormalBackgroundImageProperty =
DependencyProperty.Register ( "NormalBackgroundImage", typeof ( string ), typeof ( ImageButton ), new PropertyMetadata ( null ) );
/// <summary>
/// , ( )
/// </summary>
public static readonly DependencyProperty MouseoverBackgroundImageProperty =
DependencyProperty.Register ( "MouseoverBackgroundImage", typeof ( string ), typeof ( ImageButton ), new PropertyMetadata ( null ) );
/// <summary>
/// , ( )
/// </summary>
public static readonly DependencyProperty MousedownBackgroundImageProperty =
DependencyProperty.Register ( "MousedownBackgroundImage", typeof ( string ), typeof ( ImageButton ), new PropertyMetadata ( null ) );
/// <summary>
/// ( )
/// </summary>
public static readonly DependencyProperty DisabledBackgroundImageProperty =
DependencyProperty.Register ( "DisabledBackgroundImage", typeof ( string ), typeof ( ImageButton ), new PropertyMetadata ( null ) );
#endregion
次に、ボタンのStyleを書き直します.Styleはリソース辞書に保存されます.
<Style x:Key="ImageButtonStyle" TargetType="{x:Type local:ImageButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ImageButton}">
<Border x:Name="buttonBorder">
<Border.Background>
<ImageBrush ImageSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=NormalBackgroundImage}"/>
</Border.Background>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="buttonBorder">
<Setter.Value>
<ImageBrush ImageSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=MouseoverBackgroundImage}"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="buttonBorder">
<Setter.Value>
<ImageBrush ImageSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=MousedownBackgroundImage}"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="buttonBorder">
<Setter.Value>
<ImageBrush ImageSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisabledBackgroundImage}"/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
次に、コンストラクション関数でボタンのStyleを書き上げたStyleに変更します.
#region
public ImageButton() : base()
{
//
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri ( "/Zmy.Wpf.Controls;component/Style.xaml", UriKind.Relative );
this.Resources.MergedDictionaries.Add ( rd );
//
this.Style = this.FindResource ( "ImageButtonStyle" ) as Style;
}
#endregion
このようなパッケージ化により、画像ボタンの使用が非常に便利になります.
<StackPanel Orientation="Vertical">
<controls:ImageButton Height="80" Width="80"
NormalBackgroundImage="/Test;component/images/normal.png"
MousedownBackgroundImage="/Test;component/images/mousedown.png"
MouseoverBackgroundImage="/Test;component/images/mouseover.png"/>
<controls:ImageButton Height="80" Width="80" IsEnabled="False"
DisabledBackgroundImage="/Test;component/images/disabled.png"/>
</StackPanel>
ソースコードダウンロードアドレス:(ポイント不要)http://download.csdn.net/detail/lyclovezmy/7356841