【问题标题】:How can I use a DataTrigger to start a storyboard?如何使用 DataTrigger 启动情节提要?
【发布时间】:2014-02-23 11:58:26
【问题描述】:

这是我第一次在这里提出问题,而且是关于一个我完全是新手的主题,所以请在这里耐心等待......

我正在开发一个采用 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

我在 DoubleAnimationUsingKeyFrames 行中遇到问题,该行使用 Blend 生成的 Storyboard.TargetName="label" 属性来处理我正在制作动画的 UI 的每个部分。我得到的错误是:

TargetName property cannot be set on a Style Setter

似乎不允许我在这里使用 TargetName 属性,但我还能如何指定哪些动画映射到哪个 UI 组件?在我创建的 0.5 秒动画期间,我有 7 个 UI 元素正在移动并更改不透明度,所以我想我必须有一些方法来识别它们中的每一个。

我这里的方法不好,还是我做错了什么?我一直在阅读很多关于此的不同帖子,但我不确定该怎么做。似乎对触发器和用户控件可以做什么类型有严格的规定,但我不知道其中任何一个。

任何帮助或建议将不胜感激。

【问题讨论】:

    标签: wpf xaml animation mvvm storyboard


    【解决方案1】:

    我实际上不确定你是否可以,但如果你可以,那么你需要使用DataTrigger.EnterActions Property,它在触发器对象变为活动状态时应用 /em>:

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

    【讨论】:

    • 谢谢,我会试试看。你知道更好的方法吗?我愿意接受建议。
    • 我会再调查一下。感谢您的帮助!
    • @Sheridan Style 中的 Storyboard 树无法指定 TargetName,这使得这种技术非常有限
    猜你喜欢
    • 2013-11-13
    • 1970-01-01
    • 2021-07-21
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多