C# 动画';当使用DataTrigger启动动画时,不会激发s Completed事件?

C# 动画';当使用DataTrigger启动动画时,不会激发s Completed事件?,c#,wpf,animation,wpf-animation,C#,Wpf,Animation,Wpf Animation,我的问题是: 当我尝试处理DoubleAnimation的已完成时,如果动画是由DataTrigger启动的,则即使事件也不会触发。我使用datatrigger启动事件,因为它必须从viewmodel启动。我发现已完成的事件将触发EventTrigger(如单击按钮)。因此,我创建了一个简单的示例来说明doubleanimation的已完成事件在被另一个偶数(按钮单击)触发时触发,而不是在被datatrigger触发时触发。为什么会出现这种情况和/或我如何解决这种行为 我的动机(你可以跳过这个)

我的问题是:

当我尝试处理DoubleAnimation的已完成时,如果动画是由DataTrigger启动的,则即使事件也不会触发。我使用datatrigger启动事件,因为它必须从viewmodel启动。我发现已完成的事件将触发EventTrigger(如单击按钮)。因此,我创建了一个简单的示例来说明doubleanimation的已完成事件在被另一个偶数(按钮单击)触发时触发,而不是在被datatrigger触发时触发。为什么会出现这种情况和/或我如何解决这种行为

我的动机(你可以跳过这个)

我正在尝试创建一个具有3种不同状态的控件。当控件进入状态时,我希望它执行动画。我有很多麻烦让它重复动画不止一次,我知道这一点,因为动画继续作用于动画的属性,直到它被删除。为了删除动画,我想为动画的已完成事件创建一个事件处理程序。然而,这起事件并未发生

我的Xaml

<Window x:Class="AnimationTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <DataTemplate x:Key="Control">

        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding State}" Value="On">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                                Storyboard.TargetName="txtMessage"
                                Storyboard.TargetProperty="Opacity"
                                From="1.0" To="0.0" Duration="0:0:5"
                                Completed="DataTriggerAnimation_Completed" />
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger>
        </DataTemplate.Triggers>

        <DockPanel HorizontalAlignment="Center">
            <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
                <Button Content="Start Event Animation" x:Name="Button1" >
                    <Button.Background>
                        <SolidColorBrush x:Name="Button1BackgroundBrush" Color="Red" />
                    </Button.Background>
                    <Button.Triggers>
                        <EventTrigger RoutedEvent="Button.Click">
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation
                                Storyboard.TargetName="txtMessage"
                                Storyboard.TargetProperty="Opacity"
                                From="1.0" To="0.0" Duration="0:0:5"
                                FillBehavior="HoldEnd"
                                Completed="EventTriggerAnimation_Completed" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Button.Triggers>
                </Button>

                <Button Content="Data Animation" Click="Button_Click" />
            </StackPanel>

            <TextBlock x:Name="txtMessage" Text="{Binding Message}" />
        </DockPanel>
    </DataTemplate>
</Window.Resources>

<ContentPresenter ContentTemplate="{StaticResource Control}" Content="{Binding}" />

</Window>
我的视图模型

class MainWindowViewModel : INotifyPropertyChanged
{
    private const string message = "This message is visible";

    public string Message
    {
        get { return message; }
    }

    private States state;

    public States State
    {
        get { return state; }
        set 
        { 
            state = value;
            OnPropertyChanged("State");
        }
    }

    public enum States
    {
        Off,
        On
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

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

    #endregion
}
如果您想下载该项目,请点击此处

class MainWindowViewModel : INotifyPropertyChanged
{
    private const string message = "This message is visible";

    public string Message
    {
        get { return message; }
    }

    private States state;

    public States State
    {
        get { return state; }
        set 
        { 
            state = value;
            OnPropertyChanged("State");
        }
    }

    public enum States
    {
        Off,
        On
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

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

    #endregion
}