这是一种可行的方法:

<Button.Triggers>
  <EventTrigger RoutedEvent="Button.Click">
    <BeginStoryboard>
      <Storyboard>
        <ColorAnimation
          Storyboard.TargetName="myAnimatedBrush"
          Storyboard.TargetProperty="Color"
          From="Red" To="Blue" Duration="0:0:7" />
      </Storyboard>
    </BeginStoryboard>
  </EventTrigger>
</Button.Triggers>


但是,假设我有:

      <Storyboard x:Name="name">
        <ColorAnimation
          Storyboard.TargetName="myAnimatedBrush"
          Storyboard.TargetProperty="Color"
          From="Red" To="Blue" Duration="0:0:7" />
      </Storyboard>


并想重复使用几次。

<Button.Triggers>
  <EventTrigger RoutedEvent="Button.Click">
    <BeginStoryboard>
      //
      // <--->  what whould I put here??
      //
    </BeginStoryboard>
  </EventTrigger>
</Button.Triggers>


我只对XAML感兴趣,而不对c#感兴趣。

编辑:

使用答案中的建议后,出现错误:


属性{StaticResource myStoryboard}的值超出范围。

最佳答案

使其成为资源并使用StaticResource对其进行调用。

[考虑所有资源都在App.xaml中定义]

<Application.Resources>
    <Storyboard x:Key="MyStoryboard">
        ....
    </Storyboard>
</Application.Resources>


然后,在按钮的实例

<Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
        <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"
                         x:Name="MyStoryboard_Begin"/>
    </EventTrigger>
<Button.Triggers>


注意:x:Name不是必需的,但是如果您要确保在运行另一个故事板之前确保此故事板已停止,则很有用:在另一个触发器中,请使用StopStoryboard

关于silverlight - 重用现有的 Storyboard ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8055302/

10-10 16:16