WPF,如何使用xaml点击按钮背景闪烁

时间:2016-08-01 07:12:54

标签: c# wpf animation button storyboard

我想让所有按钮在点击时闪烁5秒钟。

  • 我尝试通过适用于所有按钮的样式来实现(当我在xaml中声明按钮时,是否需要引用样式或者样式是否自动应用于所有按钮?)

    < / LI>
  • 我可以改变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>

3 个答案:

答案 0 :(得分:4)

1.是否将样式应用于所有按钮

2.Animate backgrouund Storyboard.TargetProperty =“(Button.Background)。(SolidColorBrush.Color)”。确保默认样式不会覆盖您的动画样式。 ref 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”以显示黑色到红色。按照你喜欢的方式改变时间。

答案 1 :(得分:2)

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

 expect(hash).to match({mytime: be_near_time_now_db_string})  # you need to write your own matcher for this to work.

只需根据需要更改 <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> 中的颜色

答案 2 :(得分:-1)

我似乎一般都有改变按钮背景颜色的问题,这似乎是一个广泛分享的问题。我提出了以下解决方案,也可以。它通过Opacity定位DoubleAnimation并且非常灵活。

<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>