WPF停止可见性更改的故事板
问题描述:
我有一个用户控制故事板,并且我想在控件的可见性更改时停止动画。WPF停止可见性更改的故事板
我创建了一个触发器来暂停动画,并根据状态启动它,但我一直得到一个ArgumentException。
这里是XAML:
<UserControl.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard x:Name="ProgressAnimation_BeginStoryboard" Storyboard="{StaticResource ProgressAnimation}"/>
</EventTrigger>
<Trigger Property="Control.Visibility" Value="Collapsed">
<PauseStoryboard BeginStoryboardName="ProgressAnimation_BeginStoryboard" />
</Trigger>
<Trigger Property="Control.Visibility" Value="Visible">
<ResumeStoryboard BeginStoryboardName="ProgressAnimation_BeginStoryboard" />
</Trigger>
</UserControl.Triggers>
这里是例外:
值 “System.Windows.Media.Animation.PauseStoryboard” 的类型是“System.Windows没有。 SetterBase“并且不能用于此泛型集合。 参数名称:值
如何在XAML中执行此操作?
感谢, 劳尔
答
看看这个sample from MSDN:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<Rectangle Name="TargetRect" Width="200" Height="200" Fill="Blue"/>
<Button Name="Begin">BeginStoryboard</Button>
<Button Name="Pause">PauseStoryboard</Button>
<Button Name="Resume">ResumeStoryboard</Button>
<StackPanel.Triggers>
<EventTrigger SourceName="Begin" RoutedEvent="Button.Click">
<BeginStoryboard Name="ColorStoryboard">
<Storyboard TargetName="TargetRect">
<ColorAnimation Storyboard.TargetProperty="Fill.Color" To="Red" Duration="0:0:3" RepeatBehavior="Forever" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger SourceName="Pause" RoutedEvent="Button.Click">
<PauseStoryboard BeginStoryboardName="ColorStoryboard"/>
</EventTrigger>
<EventTrigger SourceName="Resume" RoutedEvent="Button.Click">
<ResumeStoryboard BeginStoryboardName="ColorStoryboard"/>
</EventTrigger>
</StackPanel.Triggers>
</StackPanel>
</Page>
我能看到的唯一区别是,他们使用的是EventTrigger
在这里,但它应该具有相同的行为,至少在我的经验。
答
您可以使用控制模板,它做的事:
<ControlTemplate>
... Control stuff here
<ControlTemplate.Triggers>
<Trigger Property="Visibility" Value="Visible">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource AnimationStoryboard}" x:Name="AnimationBeginStoryboard"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="AnimationBeginStoryboard"/>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
这不会起作用,因为用户控件只能包含EventTriggers,而我需要一个。 –
HaxElit
2010-01-05 23:39:18