C# 动画';当使用DataTrigger启动动画时,不会激发s Completed事件?
我的问题是: 当我尝试处理DoubleAnimation的已完成时,如果动画是由DataTrigger启动的,则即使事件也不会触发。我使用datatrigger启动事件,因为它必须从viewmodel启动。我发现已完成的事件将触发EventTrigger(如单击按钮)。因此,我创建了一个简单的示例来说明doubleanimation的已完成事件在被另一个偶数(按钮单击)触发时触发,而不是在被datatrigger触发时触发。为什么会出现这种情况和/或我如何解决这种行为 我的动机(你可以跳过这个) 我正在尝试创建一个具有3种不同状态的控件。当控件进入状态时,我希望它执行动画。我有很多麻烦让它重复动画不止一次,我知道这一点,因为动画继续作用于动画的属性,直到它被删除。为了删除动画,我想为动画的已完成事件创建一个事件处理程序。然而,这起事件并未发生 我的XamlC# 动画';当使用DataTrigger启动动画时,不会激发s Completed事件?,c#,wpf,animation,wpf-animation,C#,Wpf,Animation,Wpf Animation,我的问题是: 当我尝试处理DoubleAnimation的已完成时,如果动画是由DataTrigger启动的,则即使事件也不会触发。我使用datatrigger启动事件,因为它必须从viewmodel启动。我发现已完成的事件将触发EventTrigger(如单击按钮)。因此,我创建了一个简单的示例来说明doubleanimation的已完成事件在被另一个偶数(按钮单击)触发时触发,而不是在被datatrigger触发时触发。为什么会出现这种情况和/或我如何解决这种行为 我的动机(你可以跳过这个)
<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
}