【问题标题】:WPF, how to make button background blink upon click, using xamlWPF,如何使用 xaml 在单击时使按钮背景闪烁
【发布时间】:2016-12-06 04:24:24
【问题描述】:

我希望所有按钮在被点击时闪烁 5 秒钟。

  • 我尝试通过适用于所有按钮的样式来做到这一点(我在 xaml 中声明按钮时是否需要引用该样式,还是该样式会自动应用于所有按钮?)

  • 我可以让Foreground 改变颜色,但我想要的是按钮文本后面的背景改变颜色而不是文本本身。

  • 我目前有一个ColorAnimation,但我希望按钮背景通过两种颜色交替闪烁,我不希望显示整个色谱。

到目前为止,我有以下代码。有人可以帮助我朝正确的方向前进吗?

编辑

如果对按钮背景进行动画处理比较困难,那么我可以轻松地使用前景动画。

<Style TargetType="{x:Type Button}">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Click">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard BeginTime="00:00:00" 
                                RepeatBehavior="Forever" 
                                Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
                            <ColorAnimation From="Black" To="Red" Duration="0:0:5"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
    </Style>

【问题讨论】:

    标签: c# wpf animation button storyboard


    【解决方案1】:

    1.是的,样式适用于所有按钮

    2.Animate 背景 Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"。确保您的动画样式不会被默认样式覆盖。 参考stackoverflow

    3.可能同时运行 2 个不透明动画。一个从透明变成黑色,另一个同时从红色变成透明。这只是一个想法,没有尝试过... 1. 列表项

    编辑

    我尝试了这段代码,它成功了。关键是禁用默认样式宽度 OverridesDefaultStyle="False"

    <Window.Resources>
    <Style TargetType="{x:Type Button}">
          <Setter Property="Background" Value="Blue"></Setter>
        <Style.Triggers>
            <EventTrigger RoutedEvent="Click">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                            <Storyboard BeginTime="00:00:00" 
                            RepeatBehavior="Forever" 
                                        AutoReverse="True"
                            Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)">
                                <ColorAnimation From="Black" To="Red" Duration="0:0:1"/>
                            </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
    </Style>
    
    </Window.Resources>
    <Button Width="100" Height="35" OverridesDefaultStyle="False"  Focusable="False">dfdfdf</Button>
    

    编辑

    还添加 Focusable="False" 以显示黑色到红色。随心所欲地更改时间。

    【讨论】:

    • 什么也没发生。这是我的彩色动画:&lt;ColorAnimation To="LawnGreen" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" FillBehavior="Stop" Duration="0:0:2"/&gt;。但它没有任何作用。
    【解决方案2】:

    您可以尝试以下方法。我不认为这很漂亮,但符合您的要求,不会褪色:

     <Style TargetType="{x:Type Button}">
                <Style.Resources>
                    <Storyboard x:Key="Storyboard" Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
                        <ColorAnimationUsingKeyFrames  Duration="0:0:5" >
                            <DiscreteColorKeyFrame KeyTime="0:0:1" Value="Black"></DiscreteColorKeyFrame>
                            <DiscreteColorKeyFrame KeyTime="0:0:2" Value="Red"></DiscreteColorKeyFrame>
                            <DiscreteColorKeyFrame KeyTime="0:0:3" Value="Black"></DiscreteColorKeyFrame>
                            <DiscreteColorKeyFrame KeyTime="0:0:4" Value="Red"></DiscreteColorKeyFrame>
                            <DiscreteColorKeyFrame KeyTime="0:0:5" Value="Black"></DiscreteColorKeyFrame>
                        </ColorAnimationUsingKeyFrames>
                    </Storyboard>
                </Style.Resources>
                <Style.Triggers>
                    <EventTrigger RoutedEvent="Click">
                        <EventTrigger.Actions>
                            <BeginStoryboard Name="flash" Storyboard="{StaticResource Storyboard}"/>
                        </EventTrigger.Actions>
                    </EventTrigger>
                </Style.Triggers>
            </Style>
    

    只需根据需要更改 DiscreteColorKeyFrame 中的颜色

    【讨论】:

    • 正如对另一个答案的评论中指出的那样,Background 不会以某种方式改变我的按钮背景颜色,即使我明确指定了按钮的背景颜色。这似乎是许多人正在经历的问题。但是,您对动画作品的想法(使用Foreground),尽管它是一个粗略的解决方案。最后我决定使用DoubleAninmation 定位Opacity
    • 您是否在某处设置了按钮的初始背景?你的行为听起来就像这样。
    • 我没有,但可能是包含树上方按钮的控件可能会设置它。当我使用第三方库 (DevExpress) 时,很难说我在 DevExpress 控件中托管按钮。
    【解决方案3】:

    我似乎在更改按钮的背景颜色方面普遍存在问题,这似乎是一个广泛共享的问题。相反,我想出了以下同样有效的解决方案。它通过DoubleAnimationOpacity 为目标,并且非常灵活。

    <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                           <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.4" RepeatBehavior="30x"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2018-05-26
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多