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


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

 

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

 

效果如下:

 

 

 

首先是自定义按钮类:

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; }      
    }

 

其次是创建按钮模板:

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 >

 

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

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 即可


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM