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在这里,但它应该具有相同的行为,至少在我的经验。

+0

这不会起作用,因为用户控件只能包含EventTriggers,而我需要一个。 – HaxElit 2010-01-05 23:39:18

您可以使用控制模板,它做的事:

<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>