如何使按钮和背景在wpf中闪烁

时间:2016-03-03 15:27:18

标签: c# wpf xaml animation wpf-controls

问题

我遇到的问题是当用户点击按钮时,我希望按钮从100%可见开始闪烁到大约20%可见,并且WPF窗口的背景将颜色从#ffffff更改为{{ 1}}这应该发生,直到再次点击按钮。然后动画应该停止。

代码

我已经做了一些挖掘,找到了somone做到这一点的地方,我似乎什么都看不到。我目前的代码如下。

点击时,我想要从100%可见到20%可见的按钮闪烁:

#d6786a

我试图在按钮中添加一个故事板,它只是不起作用:

<Button Name="button2" Style="{DynamicResource NoChromeButton}" Visibility="{Binding VisableState, Converter={StaticResource BoolToVis}}" ToolTip="Start Live Stream" Command="{Binding PlayStream}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="5" Height="22" Width="22" >
    <Image Source="../Images/recordicon.png"/>
</Button>

我是WPF的新手,所以进入动画对我来说更难。如果有人能在这个舞台上给我一些帮助,那就太好了。

2 个答案:

答案 0 :(得分:2)

在资源中定义动画,例如像

<Window x:Name="window" x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication1"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <Storyboard x:Key="FlashButton" RepeatBehavior="Forever">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="button">
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.2"/>
            <EasingDoubleKeyFrame KeyTime="0:0:2" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="ChangeColor">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="grid">
            <EasingColorKeyFrame KeyTime="0:0:1" Value="Red"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="ChangeColor2">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="grid">
            <EasingColorKeyFrame KeyTime="0:0:1" Value="White"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>
<Grid x:Name="grid" Background="White">
    <Button x:Name="button" Content="Button" Margin="10,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75" Click="button_Click"/>

</Grid>

并为按钮单击创建处理程序

        private bool isRunning;
    private void button_Click(object sender, RoutedEventArgs e)
    {
        var flashButton = FindResource("FlashButton") as Storyboard;
        var changeColor = FindResource("ChangeColor") as Storyboard;
        var changeColor2 = FindResource("ChangeColor2") as Storyboard;

        if (isRunning)
        {
            flashButton.Stop();
            changeColor2.Begin();
            isRunning = false;
        }
        else
        {
            flashButton.Begin();
            changeColor.Begin();
            isRunning = true;
        }
    }

答案 1 :(得分:0)

要将“可见性更改为大约20%”,您必须动画 Opacity属性(double0.0类型到1.0)不是Visibilityenum有3个值,请参阅msdn)。

如果您可以使用ToggleButton(由于其CheckedUnckecked路由事件很好),可以轻松实现目标:

<ToggleButton>
    <ToggleButton.Triggers>
        <EventTrigger RoutedEvent="ToggleButton.Checked">
            <BeginStoryboard x:Name="storyboard">
                <Storyboard RepeatBehavior="Forever"
                            AutoReverse="True">
                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                     To="0.2"
                                     Duration="0:0:1" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="ToggleButton.Unchecked">
            <StopStoryboard BeginStoryboardName="storyboard" />
        </EventTrigger>
    </ToggleButton.Triggers>
</ToggleButton>