WPF后台自定义文字带背景的选择状态按钮

如果要转载请注明来出处(http://www.cnblogs.com/therock),谢谢!

 

描述:可以对按钮的选择或未选择时的文字颜色以及背景图片进行变换。

 

效果如下:

 

 

 

首先是自定义按钮类:

ExpandedBlockStart.gif View Code
  public  class TextImageButton:Button
    {
         public TextImageButton()
        {
             this.IsSelectedChanged +=  new IsSelectedChangedEventHandler(TextImageButton_IsSelectedChanged);
        }

         private  void TextImageButton_IsSelectedChanged( object sender, DependencyPropertyChangedEventArgs e)
        {
             if ( this.IsSelected ==  true)
            {
                 this.TextColor = SelectedTextColor;
                 this.Background = SelectedBackground;
            }
             else
            {
                 this.TextColor = UnSelectedTextColor;
                 this.Background = UnSelectedBackground;
            }
        }

         public  delegate  void IsSelectedChangedEventHandler( object sender, DependencyPropertyChangedEventArgs e);
         public  event IsSelectedChangedEventHandler IsSelectedChanged;

         private  bool isSelected =  false;
         public  bool IsSelected
        {
             get{ return isSelected;}
             set
            {
                 if (isSelected != value)
                {
                    isSelected = value;
                    IsSelectedChanged( this, new DependencyPropertyChangedEventArgs());
                }
            }
        }

         public  new  static DependencyProperty BackgroundProperty = DependencyProperty.RegisterAttached
        (
             " Background ",
             typeof(ImageSource),
             typeof(Button)
        );

         public  new ImageSource Background
        {
             getreturn (ImageSource)GetValue(BackgroundProperty);}
             set { SetValue(BackgroundProperty, value); }
        }

         public  static DependencyProperty TextColorProperty = DependencyProperty.RegisterAttached
        (
             " TextColor ",
             typeof(SolidColorBrush),
             typeof(Button)
        );

         public SolidColorBrush TextColor
        {
             get {  return (SolidColorBrush)GetValue(TextColorProperty); }
             set { SetValue(TextColorProperty, value); }
        }

         public  static DependencyProperty TextProperty = DependencyProperty.RegisterAttached
        (
             " Text ",
             typeof( string),
             typeof(Button)
        );

         public  string Text
        {
             get {  return ( string)GetValue(TextProperty); }
             set { SetValue(TextProperty, value); }
        }

         public ImageSource SelectedBackground {  getset; }
         public ImageSource UnSelectedBackground {  getset; }
         public SolidColorBrush SelectedTextColor {  getset; }
         public SolidColorBrush UnSelectedTextColor {  getset; }      
    }

 

其次是创建按钮模板:

ExpandedBlockStart.gif View Code
     < ControlTemplate  TargetType ="Button"  x:Key ="SelectButton" >
         < Grid  Cursor ="Hand" >
             < Image  Source =" {Binding Path=Background,RelativeSource={RelativeSource TemplatedParent}} " ></ Image >
             < TextBlock  FontFamily ="微软雅黑"  FontSize ="24"  Width ="220"  HorizontalAlignment ="Center"  VerticalAlignment ="Center"  TextAlignment ="Center"  Text =" {Binding Path=Text,RelativeSource={RelativeSource TemplatedParent}} "  Foreground =" {Binding Path=TextColor,RelativeSource={RelativeSource TemplatedParent}} "  TextWrapping ="Wrap" ></ TextBlock >
         </ Grid >
     </ ControlTemplate >

 

最后就可以在后台中直接动态创建:

ExpandedBlockStart.gif View Code
            TextImageButton tbi =  new TextImageButton()
            {
                Width =  280,
                Height =  100,
                Template =  this.Resources[ " SelectButton "as ControlTemplate,
                Background =  new BitmapImage( new Uri( @" /项目名称;component/Images/UnSelectButton.png ", UriKind.Relative)),
                SelectedBackground =  new BitmapImage( new Uri( @" /项目名称;component/Images/SelectButton.png ", UriKind.Relative)),
                UnSelectedBackground =  new BitmapImage( new Uri( @" /项目名称;component/Images/UnSelectButton.png ", UriKind.Relative)),
                TextColor =  new SolidColorBrush(Color.FromRgb( 515151)),
                SelectedTextColor =  new SolidColorBrush(Color.FromRgb( 255255255)),
                UnSelectedTextColor =  new SolidColorBrush(Color.FromRgb( 515151)),
                Name =  " 按钮名称 ",
                Text =  " 按钮内容 "
            };

 变换按钮的状态通过 tbi.IsSelected = true 或 tbi.IsSelected = false 即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值