WPF故事板动画不闪烁

时间:2016-03-16 19:05:20

标签: c# wpf animation storyboard

我一直在遵循如何制作标签闪光的一些说明。我没有很多动画经验,所以我不知道我的问题出在哪里!我的代码是:

<Window x:Class="WPFAnimationStoryBoard.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:WPFAnimationStoryBoard"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <ResourceDictionary>
        <Storyboard x:Key="blinkAnimation" RepeatBehavior="1" >
            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
                                          Storyboard.TargetName="InitProc"
                                          AutoReverse="True">
                <ColorAnimationUsingKeyFrames.KeyFrames>
                    <DiscreteColorKeyFrame KeyTime="0:0:0" Value="White"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:1" Value="Black"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:2" Value="White"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:3" Value="Black"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:4" Value="White"/>
                </ColorAnimationUsingKeyFrames.KeyFrames>
            </ColorAnimationUsingKeyFrames>
            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)"
                                          Storyboard.TargetName="InitProc"
                                          AutoReverse="True">
                <ColorAnimationUsingKeyFrames.KeyFrames>
                    <DiscreteColorKeyFrame KeyTime="0:0:0" Value="Black"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:1" Value="White"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:2" Value="Black"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:3" Value="White"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:4" Value="Black"/>
                </ColorAnimationUsingKeyFrames.KeyFrames>
            </ColorAnimationUsingKeyFrames>
        </Storyboard>
    </ResourceDictionary>
</Window.Resources>
<Grid>

   <Label Name="InitProc" Grid.Row="0" Grid.Column="2" Content="{Binding ElementName=myWindow, Path=Hello}" Background="White" Foreground="Black">
        <Label.Triggers>
            <EventTrigger RoutedEvent="Binding.TargetUpdated">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <StaticResource ResourceKey="blinkAnimation"/>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Label.Triggers>
    </Label>
</Grid>

这是我的代码背后:

namespace WPFAnimationStoryBoard
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        Hello = "hello";
    }
    private string _hello;

    public event PropertyChangedEventHandler PropertyChanged;

    public string Hello
    {
        get { return _hello; }
        set
        {
            _hello = value;
            OnPropertyChanged("Hello");
        }
    }

    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}
}

我做错了什么?我很感激,如果你能得到答案,你可以通过动画提供幕后发生的一些事情。

谢谢!

编辑:我改为允许绑定到属性更新...丢弃那个球。它仍然不会产生闪烁,但它确实在UI中显示世界“Hello”。

1 个答案:

答案 0 :(得分:2)

来自MSDN上的Binding.TargetUpdated Attached Event页:

  

当值从绑定源传输到的时发生   绑定目标,但仅限于与NotifyOnTargetUpdated的绑定   值设置为true。

所以你的绑定应该是这样的:

Content="{Binding ElementName=myWindow, Path=Hello, NotifyOnTargetUpdated=True}"