我该如何使用DataTrigger来启动一个故事板?

4

这是我第一次在这里提问,而且涉及到我完全不熟悉的主题,请耐心与我合作...

我正在使用MVVM架构开发WPF GUI应用程序,我们采用的方法是有多个视图需要在UI移动时‘飞入’和‘飞出’屏幕。我们面临的问题是如何在UI从一个视图转换到另一个视图时运行动画。我在我的主视图上有一个按钮,当按下时会更改属性以让一个视图知道它需要离开,我一直在尝试将其绑定到我的动画开头。我设置了计时器来延迟视图的更改,以便让我的故事板动画持续一段时间,但我无法让我的动画运行!在XAML中,我已经像这样在DataTrigger中设置了我的故事板(在Blend中生成):

<UserControl.Style>
   <Style>
      <Style.Triggers>
         <DataTrigger Binding="{Binding StandbyViewModel.LeavingStandbyView}" Value="true">
            <BeginStoryboard>
               <Storyboard>
                  <DoubleAnimationUsingKeyFrames ...> // I've got 22 of these statements in my storyboard

我在使用Blend生成的DoubleAnimationUsingKeyFrames代码中遇到了问题,具体是关于Storyboard.TargetName="label"属性,它涉及到我正在进行动画处理的UI的每个部分。我遇到的错误是:

TargetName property cannot be set on a Style Setter

似乎我在这里不能使用TargetName属性,但我该如何指定哪个动画映射到哪个UI组件呢? 我有7个UI元素,我正在移动它们并在我创建的0.5秒动画中更改不透明度,所以我想必须有一种方法来识别它们中的每一个。
我的方法是否不好,还是我做错了什么? 我已经阅读了很多不同的帖子,对该怎么做感到困惑。 似乎有严格的规则规定了什么类型的触发器和用户控件可以做什么,但我不知道其中任何一个。
非常感谢您提供任何帮助或建议。
1个回答

3

我不确定您是否可以这样做,但是如果可以的话,您需要使用DataTrigger.EnterActions属性,该属性在触发对象变为活动状态时应用:

<UserControl.Style>
   <Style>
      <Style.Triggers>
         <DataTrigger Binding="{Binding StandbyViewModel.LeavingStandbyView}" Value="true">
             <DataTrigger.EnterActions>
                <BeginStoryboard>
                   <Storyboard>
                      <DoubleAnimationUsingKeyFrames ...> 

谢谢,我会尝试一下。你知道更好的方法吗?我愿意听取建议。 - Ian
使用 EventTrigger - Sheridan
我会再次查看。谢谢你的帮助! - Ian
@Sheridan 在样式中的Storyboard树无法指定TargetName,这使得该技术非常有限。 - patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接