• 2018-8-10-WPF-修改按钮按下的颜色


    title author date CreateTime categories
    WPF 修改按钮按下的颜色
    lindexi
    2018-08-10 19:16:53 +0800
    2018-03-15 20:26:22 +0800
    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>

    代码:下载

  • 相关阅读:
    UIPasteboard 粘贴板
    UIViewController没有随着设备一起旋转的原因
    UIButton 应用选择状态(附:UIButton 常用状态)
    WebService 中参数为枚举时引发的血案
    设计模式(1)之面向对象设计原则 阿正
    2012年年终总结 阿正
    生活工作如登山 阿正
    感谢我的技术总监 阿正
    尽孝要尽早 阿正
    我老了吗?不 你依然年轻 阿正
  • 原文地址:https://www.cnblogs.com/lindexi/p/12086132.html
Copyright © 2020-2023  润新知