• WPF控件库:文字按钮的封装


    需求:封装按钮,按钮上面只显示文字。在鼠标移上去、鼠标点击按钮、以及将按钮设为不可用时按钮的背景色和前景色需要发生变化

    实现:继承Button类,封装如下6个属性:

    #region 依赖属性
    /// <summary>
    /// 当鼠标移到按钮上时,按钮的前景色(这是依赖属性)
    /// </summary>
    public static readonly DependencyProperty MouserOverForegroundProperty =
        DependencyProperty.Register ( "MouserOverForeground", typeof ( Brush ), typeof ( TextButton ), new PropertyMetadata ( Brushes.Black ) );
    
    /// <summary>
    /// 鼠标移到按钮上时,按钮的背景色(这是依赖属性)
    /// </summary>
    public static readonly DependencyProperty MouseOverBackgroundProperty =
        DependencyProperty.Register ( "MouseOverBackground", typeof ( Brush ), typeof ( TextButton ), new PropertyMetadata ( Brushes.White ) );
    
    /// <summary>
    /// 当鼠标按下时,按钮的前景色(这是依赖属性)
    /// </summary>
    public static readonly DependencyProperty MousedownForegroundProperty =
        DependencyProperty.Register ( "MousedownForeground", typeof ( Brush ), typeof ( TextButton ), new PropertyMetadata ( Brushes.Black ) );
    
    /// <summary>
    /// 当鼠标按下时,按钮的背景色(这是依赖属性)
    /// </summary>
    public static readonly DependencyProperty MousedownBackgroundProperty =
        DependencyProperty.Register ( "MousedownBackground", typeof ( Brush ), typeof ( TextButton ), new PropertyMetadata ( Brushes.White ) );
    
    /// <summary>
    /// 当按钮不可用时,按钮的前景色(这是依赖属性)
    /// </summary>
    public static readonly DependencyProperty DisabledForegroundProperty =
        DependencyProperty.Register ( " DisabledForeground", typeof ( Brush ), typeof ( TextButton ), new PropertyMetadata ( Brushes.Black ) );
    
    /// <summary>
    /// 当按钮不可用时,按钮的背景色(这是依赖属性)
    /// </summary>
    public static readonly DependencyProperty DisabledBackgroundProperty =
        DependencyProperty.Register ( "DisabledBackground", typeof ( Brush ), typeof ( TextButton ), new PropertyMetadata ( Brushes.White ) );
    #endregion

    然后更改按钮的样式,样式封装在资源字典中:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:Zmy.Wpf.Controls">
        <Style x:Key="TextButtonStyle" TargetType="{x:Type local:TextButton}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:TextButton}">
                        <Border x:Name="buttonBorder"
                                Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding Foreground}">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Self}, Path=MouserOverForeground}"/>
                    <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=MouseOverBackground}"/>
                </Trigger>
    
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Self}, Path=MousedownForeground}"/>
                    <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=MousedownBackground}"/>
                </Trigger>
    
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Self}, Path=DisabledForeground}"/>
                    <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=DisabledBackground}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ResourceDictionary>

    然后在TextButton的构造函数中设置按钮的样式:

    #region 构造函数
    public TextButton() : 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 ( "TextButtonStyle" ) as Style;
    }
    #endregion

    这样整个文字按钮就封装好了,调用起来非常简单:

            <controls:TextButton Content="测试按钮" Width="300" Height="50"
                                 MouserOverForeground="Yellow" MouseOverBackground="Blue" MousedownBackground="Green" MousedownForeground="Blue"/>
    
            <controls:TextButton Content="测试按钮" Width="300" Height="50" IsEnabled="False"
                                 DisabledForeground="Yellow" DisabledBackground="Blue" Margin="0,100,0,0"/>

     源代码下载:http://download.csdn.net/detail/lyclovezmy/7356125

    不要积分。

    对应的图片按钮封装:http://www.cnblogs.com/DoNetCoder/p/3732310.html

  • 相关阅读:
    指针变量的值和指针变量地址
    定时备份docker容器中mysql的数据
    sql server表外键查询
    Go语言strings包基本操作
    centos安装字体库处理中文乱码
    codeforces 1610D
    汽车配件生产加工企业管理软件出售生产加工刹车盘、刹车鼓、刹车蹄、刹车片等企业通用
    关于document.onmousemove报错Invalid or unexpected token问题
    SilverLight支持的DataTable可以直接绑定
    我的工作我的状态
  • 原文地址:https://www.cnblogs.com/DoNetCoder/p/3732005.html
Copyright © 2020-2023  润新知