WPF 修改按钮按下的颜色

本文告诉大家如何使用附加属性修改按钮按下去时的背景

先让大家看个图片,下面来告诉大家如何做

首先在后台创建一个附加属性

    public class ButtonBrush
    {
        public static readonly DependencyProperty ButtonPressBackgroundProperty = DependencyProperty.RegisterAttached(
            "ButtonPressBackground", typeof(Brush), typeof(ButtonBrush), new PropertyMetadata(default(Brush)));

        public static void SetButtonPressBackground(DependencyObject element, Brush value)
        {
            element.SetValue(ButtonPressBackgroundProperty, value);
        }

        public static Brush GetButtonPressBackground(DependencyObject element)
        {
            return (Brush) element.GetValue(ButtonPressBackgroundProperty);
        }
    }

然后在 xaml 使用附加属性

        <Button Margin="10,10,10,10" 
                Width="300" Height="100"
                Content="确定"
                local:ButtonBrush.ButtonPressBackground="#FFfcac1c" />

如何在按钮按下时使用这个附加属性修改按钮颜色?实际重写按钮的样式可以看到,在按下时可以修改颜色

        <Style x:Key="Style.OkOperationButton"
               TargetType="ButtonBase">
            <Setter Property="Width" Value="110" />
            <Setter Property="Height" Value="44" />
            <Setter Property="FontSize" Value="24" />
            <Setter Property="Background" Value="#FF0087FF" />
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <Setter Property="VerticalContentAlignment" Value="Center" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ButtonBase}">
                        <Border x:Name="Border" Width="{TemplateBinding Width}"
                                Height="{TemplateBinding Height}"
                                CornerRadius="22" Background="{TemplateBinding Background}">
                            <TextBlock x:Name="TextBlock"
                                       Text="{TemplateBinding Content}"
                                       FontSize="{TemplateBinding FontSize}"
                                       HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                       VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                        </Border>

                        <ControlTemplate.Triggers>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter Property="Background"
                                        Value="#FFfcac1c" />
                                <Setter TargetName="TextBlock" Property="Foreground" Value="#FFFFFFFF" />
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter TargetName="Border" Property="Background" Value="#4D0087FF" />
                                <Setter TargetName="TextBlock" Property="Foreground" Value="#4DFFFFFF" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

那么如何在设置使用附加属性,实际上使用下面的代码直接从按钮获取附加属性

                  <Trigger Property="IsPressed" Value="True">
                                <Setter Property="Background"
                                        Value="{Binding RelativeSource = {RelativeSource Self},Path=(local:ButtonBrush.ButtonPressBackground)}" />
                                <Setter TargetName="TextBlock" Property="Foreground" Value="#FFFFFFFF" />
                            </Trigger>

所有的代码

 <Window.Resources>

        <Style x:Key="Style.OkOperationButton"
               TargetType="ButtonBase">
            <Setter Property="Width" Value="110" />
            <Setter Property="Height" Value="44" />
            <Setter Property="FontSize" Value="24" />
            <Setter Property="Background" Value="#FF0087FF" />
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <Setter Property="VerticalContentAlignment" Value="Center" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ButtonBase}">
                        <Border x:Name="Border" Width="{TemplateBinding Width}"
                                Height="{TemplateBinding Height}"
                                CornerRadius="22" Background="{TemplateBinding Background}">
                            <TextBlock x:Name="TextBlock"
                                       Text="{TemplateBinding Content}"
                                       FontSize="{TemplateBinding FontSize}"
                                       HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                       VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                        </Border>

                        <ControlTemplate.Triggers>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter Property="Background"
                                        Value="{Binding RelativeSource = {RelativeSource Self},Path=(local:ButtonBrush.ButtonPressBackground)}" />
                                <Setter TargetName="TextBlock" Property="Foreground" Value="#FFFFFFFF" />
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter TargetName="Border" Property="Background" Value="#4D0087FF" />
                                <Setter TargetName="TextBlock" Property="Foreground" Value="#4DFFFFFF" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    </Window.Resources>
    <Grid>
        <Button Margin="10,10,10,10" Style="{StaticResource Style.OkOperationButton}"
                Width="300" Height="100"
                Content="确定"
                local:ButtonBrush.ButtonPressBackground="#FFfcac1c" />
    </Grid>

代码:下载


本文会经常更新,请阅读原文: https://lindexi.gitee.io/lindexi/post/WPF-%E4%BF%AE%E6%94%B9%E6%8C%89%E9%92%AE%E6%8C%89%E4%B8%8B%E7%9A%84%E9%A2%9C%E8%89%B2.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏破晓之歌

pycharm主题设置 原

File -> Settings -> IDE Settings -> Appearance -> Theme -> 选择主题

67030
来自专栏张戈的专栏

你知道Windows和WordPress上帝模式吗?

一、Windows 上帝模式 这个玩意出来很久很久了,估计不用多说,知道的同学还是挺多的,不知道的也只要百度一下,你就知道了。 方法很简单,在 Windows ...

39460
来自专栏程序你好

微软Windows 10的上下文菜单引入Fluent Design风格

9820
来自专栏有刻

Mac 小记 — 杂录

37760
来自专栏葡萄城控件技术团队

UWP 入门教程2——如何实现自适应用户界面

系列文章 UWP入门教程1——UWP的前世今生 如上文所说的,布局面板根据可用的屏幕空间,指定界面元素的大小和位置。例如StackPanel 会水平或垂直排列界...

23650
来自专栏小白课代表

Easy Paint Tool SAI (1和2)下载安装教程。

Easy Paint Tool SAI是SYSTEMAX公司发行的一款商业化的绘图软件,也是很多大触的必备软件之一。

53310
来自专栏小白安全

ClickJacking攻击-获取管理员权限

前言 有一段时间没做测试了,偶尔的时候也会去挖挖洞。本文章要写的东西是我利用ClickJacking拿下管理员权限的测试过程。但在说明过程之前,先带大...

343110
来自专栏施炯的IoT开发专栏

利用HardwareButton操作Windows Mobile的硬件按钮

    大家知道,在Windows Mobile的应用程序中,我们可以利用模拟按键VK来模拟一些硬件按键的功能,如调用今日屏幕、锁定键盘、关闭设备、打开扬声器等...

19680
来自专栏liulun

博客园文章编辑器5.0版本发布(markdown版)

(后来我自己发现了一些问题,于是偷偷发了博客园文章编辑器的4.0.1版本,也没通知大家,不过好在有自动升级功能)

47820
来自专栏DannyHoo的专栏

去一家新公司使用p12文件进行真机测试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

18120

扫码关注云+社区

领取腾讯云代金券