• wpf 自定义Button按钮


    创建ButtonEx类

     public class ButtonEx : Button
        {
            static ButtonEx()
            {
                DefaultStyleKeyProperty.OverrideMetadata(typeof(ButtonEx), new FrameworkPropertyMetadata(typeof(ButtonEx)));
            }
    
            /// <summary>
            /// 按钮类型
            /// </summary>
            public ButtonType ButtonType
            {
                get { return (ButtonType)GetValue(ButtonTypeProperty); }
                set { SetValue(ButtonTypeProperty, value); }
            }
    
            public static readonly DependencyProperty ButtonTypeProperty =
                DependencyProperty.Register("ButtonType", typeof(ButtonType), typeof(ButtonEx), new PropertyMetadata(ButtonType.Normal));
    
            /// <summary>
            /// 图片
            /// </summary>
            public ImageSource Icon
            {
                get { return (ImageSource)GetValue(IconProperty); }
                set { SetValue(IconProperty, value); }
            }
    
            public static readonly DependencyProperty IconProperty =
                DependencyProperty.Register("Icon", typeof(ImageSource), typeof(ButtonEx), new PropertyMetadata(null));
    
            /// <summary>
            /// 圆角
            /// </summary>
            public CornerRadius CornerRadius
            {
                get { return (CornerRadius)GetValue(CornerRadiusProperty); }
                set { SetValue(CornerRadiusProperty, value); }
            }
    
            public static readonly DependencyProperty CornerRadiusProperty =
                DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(ButtonEx), new PropertyMetadata(new CornerRadius(0)));
    
            /// <summary>
            /// 鼠标悬停字体颜色
            /// </summary>
            public Brush MouseOverForeground
            {
                get { return (Brush)GetValue(MouseOverForegroundProperty); }
                set { SetValue(MouseOverForegroundProperty, value); }
            }
    
            public static readonly DependencyProperty MouseOverForegroundProperty =
                DependencyProperty.Register("MouseOverForeground", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());
    
            /// <summary>
            /// 鼠标按下文字颜色
            /// </summary>
            public Brush MousePressedForeground
            {
                get { return (Brush)GetValue(MousePressedForegroundProperty); }
                set { SetValue(MousePressedForegroundProperty, value); }
            }
    
            public static readonly DependencyProperty MousePressedForegroundProperty =
                DependencyProperty.Register("MousePressedForeground", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());
    
            /// <summary>
            /// 鼠标悬停边框颜色
            /// </summary>
            public Brush MouseOverBorderbrush
            {
                get { return (Brush)GetValue(MouseOverBorderbrushProperty); }
                set { SetValue(MouseOverBorderbrushProperty, value); }
            }
    
            public static readonly DependencyProperty MouseOverBorderbrushProperty =
                DependencyProperty.Register("MouseOverBorderbrush", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());
    
            /// <summary>
            /// 鼠标悬停背景颜色
            /// </summary>
            public Brush MouseOverBackground
            {
                get { return (Brush)GetValue(MouseOverBackgroundProperty); }
                set { SetValue(MouseOverBackgroundProperty, value); }
            }
    
            public static readonly DependencyProperty MouseOverBackgroundProperty =
                DependencyProperty.Register("MouseOverBackground", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());
    
            /// <summary>
            /// 鼠标按下背景颜色
            /// </summary>
            public Brush MousePressedBackground
            {
                get { return (Brush)GetValue(MousePressedBackgroundProperty); }
                set { SetValue(MousePressedBackgroundProperty, value); }
            }
    
            public static readonly DependencyProperty MousePressedBackgroundProperty =
                DependencyProperty.Register("MousePressedBackground", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());
    
            /// <summary>
            /// SVG 
            /// </summary>
            public Geometry PathData
            {
                get
                {
                    return (Geometry)GetValue(PathDataProperty);
                }
                set
                {
                    SetValue(PathDataProperty, value);
                }
            }
    
            // Using a DependencyProperty as the backing store for PathData.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty PathDataProperty =
               DependencyProperty.Register("PathData", typeof(Geometry), typeof(ButtonEx), new PropertyMetadata(new PathGeometry()));
    
    
    
            public double PathWidth
            {
                get { return (double)GetValue(PathWidthProperty); }
                set { SetValue(PathWidthProperty, value); }
            }
    
            // Using a DependencyProperty as the backing store for PathWidth.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty PathWidthProperty =
                DependencyProperty.Register("PathWidth", typeof(double), typeof(ButtonEx), new PropertyMetadata());
    
    
    
            public double PathHeight
            {
                get { return (double)GetValue(PathHeightProperty); }
                set { SetValue(PathHeightProperty, value); }
            }
    
            // Using a DependencyProperty as the backing store for PathHeight.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty PathHeightProperty =
                DependencyProperty.Register("PathHeight", typeof(double), typeof(ButtonEx), new PropertyMetadata());
    
    
    
        }
    
        public enum ButtonType
        {
            Normal,
            Icon,
            Text,
            IconText,
            Path,
            Content,
        }

    新增 ButtonEx.xaml

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:HL.SelfTicket.Controls">
        <Style TargetType="{x:Type local:ButtonEx}">
            <Setter Property="Focusable" Value="False"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}" />
            <Style.Triggers>
                <Trigger Property="ButtonType" Value="Normal">
                    <Setter Property="Background" Value="#43a9c7"/>
                    <Setter Property="MouseOverBackground" Value="#2f96b4"/>
                    <Setter Property="MousePressedBackground" Value="#2a89a4"/>
                    <Setter Property="Foreground" Value="White"/>
                    <Setter Property="MouseOverForeground" Value="White"/>
                    <Setter Property="MousePressedForeground" Value="White"/>
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Setter Property="BorderThickness" Value="0"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type local:ButtonEx}">
                                <Border x:Name="border" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding CornerRadius}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" SnapsToDevicePixels="True">
                                    <TextBlock x:Name="txt" Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" VerticalAlignment="Center" HorizontalAlignment="Center" />
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsPressed" Value="True">
                                        <Setter TargetName="border" Property="Background" Value="{Binding MousePressedBackground,RelativeSource={RelativeSource TemplatedParent}}"/>
                                        <Setter TargetName="txt" Property="Foreground" Value="{Binding MousePressedForeground,RelativeSource={RelativeSource TemplatedParent}}"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="ButtonType" Value="Icon">
                    <Setter Property="Cursor" Value="Hand"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type local:ButtonEx}">
                                <Border Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                                    <Image x:Name="Img" VerticalAlignment="Center" HorizontalAlignment="Center" Source="{TemplateBinding Icon}" Stretch="None"/>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Opacity" Value="0.8"/>
                                    </Trigger>
                                    <Trigger Property="IsPressed" Value="True">
                                        <Setter Property="Opacity" Value="0.9"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="ButtonType" Value="Text">
                    <Setter Property="Cursor" Value="Hand"/>
                    <Setter Property="Foreground" Value="#002c99"/>
                    <Setter Property="MouseOverForeground" Value="#FF2c99"/>
                    <Setter Property="MousePressedForeground" Value="#002c99"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type local:ButtonEx}">
                                <TextBlock x:Name="txt" Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Foreground" Value="{Binding MouseOverForeground,RelativeSource={RelativeSource TemplatedParent}}" TargetName="txt"/>
                                    </Trigger>
                                    <Trigger Property="IsPressed" Value="True">
                                        <Setter Property="Foreground" Value="{Binding MousePressedForeground,RelativeSource={RelativeSource TemplatedParent}}" TargetName="txt"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="ButtonType" Value="IconText">
                    <Setter Property="Cursor" Value="Hand"/>
                    <Setter Property="Foreground" Value="#555"/>
                    <Setter Property="MouseOverForeground" Value="#555"/>
                    <Setter Property="MousePressedForeground" Value="#555"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type local:ButtonEx}">
                                <Border>
                                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                                        <Image Source="{TemplateBinding Icon}" Stretch="None"/>
                                        <TextBlock x:Name="Txt" Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
                                    </StackPanel>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Foreground" Value="{Binding MouseOverForeground,RelativeSource={RelativeSource TemplatedParent}}" TargetName="Txt"/>
                                    </Trigger>
                                    <Trigger Property="IsPressed" Value="True">
                                        <Setter Property="Foreground" Value="{Binding MousePressedForeground,RelativeSource={RelativeSource TemplatedParent}}" TargetName="Txt"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="ButtonType" Value="Path">
                    <Setter Property="Cursor" Value="Hand"/>
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="Foreground" Value="#fff"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type local:ButtonEx}">
                                <Border  Focusable="False" VerticalAlignment="Center" HorizontalAlignment="Center" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding CornerRadius}">
                                    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
                                        <Path Data="{TemplateBinding PathData}" Width="{TemplateBinding PathWidth}" Height="{TemplateBinding PathHeight}" Fill="{TemplateBinding Foreground}" Stretch="Fill"  />
                                        <TextBlock x:Name="txt" Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
                                    </StackPanel>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Opacity" Value="0.8"/>
                                    </Trigger>
                                    <Trigger Property="IsPressed" Value="True">
                                        <Setter Property="Opacity" Value="0.9"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="ButtonType" Value="Content">
                    <Setter Property="Cursor" Value="Hand"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type local:ButtonEx}">
                                <Border Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding CornerRadius}">
                                    <ContentPresenter x:Name="contentPresenter" 
                                                  Focusable="False" 
                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                                  Margin="{TemplateBinding Padding}" 
                                                  RecognizesAccessKey="True" 
                                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"  />
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Opacity" Value="0.8"/>
                                    </Trigger>
                                    <Trigger Property="IsPressed" Value="True">
                                        <Setter Property="Opacity" Value="0.9"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    
        <Style TargetType="{x:Type local:ButtonEx}" x:Key="pageButton">
            <Setter Property="Background" Value="{StaticResource BuyMianColor}"/>
            <Setter Property="MouseOverBackground" Value="#2f96b4"/>
            <Setter Property="MousePressedBackground" Value="#2a89a4"/>
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="MouseOverForeground" Value="White"/>
            <Setter Property="MousePressedForeground" Value="White"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="FontSize" Value="20"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:ButtonEx}">
                        <Grid>
                            <Border x:Name="border" Background="{TemplateBinding Background}" CornerRadius="2" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" Width="300" Height="60" SnapsToDevicePixels="True">
                                <Border.Effect>
                                    <DropShadowEffect ShadowDepth="4" BlurRadius="2" Opacity="0.5" Color="#000"/>
                                </Border.Effect>
                            </Border>
                            <TextBlock x:Name="txt" Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" VerticalAlignment="Center" HorizontalAlignment="Center" />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="border" Property="Background" Value="{Binding MouseOverBackground,RelativeSource={RelativeSource TemplatedParent}}"/>
                                <Setter TargetName="txt" Property="Foreground" Value="{Binding MouseOverForeground,RelativeSource={RelativeSource TemplatedParent}}"/>
                                <Setter TargetName="border" Property="BorderBrush" Value="{Binding MouseOverBorderbrush,RelativeSource={RelativeSource TemplatedParent}}"/>
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter TargetName="border" Property="Background" Value="{Binding MousePressedBackground,RelativeSource={RelativeSource TemplatedParent}}"/>
                                <Setter TargetName="txt" Property="Foreground" Value="{Binding MousePressedForeground,RelativeSource={RelativeSource TemplatedParent}}"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter TargetName="border" Property="Background" Value="{StaticResource ButtonBlackColor}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>

    原文:https://www.cnblogs.com/zisai/p/11050710.html 

  • 相关阅读:
    php 静态绑定
    overlaps the location of another project Zendstudio导入已经存在的目录
    12c debug 转 12C 连接CDB和PDB
    Statistics gathering and SQL Tuning Advisor
    shell 调试 2例
    专 linux命令之set x详解
    lock to deteck in oracle
    浏览器助手,请求拦截,后台模拟键鼠操作,页内嵌入JS
    WebBrowser控件的高级定制+mshtml
    创业者那些鲜为人知的事情
  • 原文地址:https://www.cnblogs.com/zisai/p/11050710.html
Copyright © 2020-2023  润新知