【问题标题】:Dynamic animation using storyboards使用故事板的动态动画
【发布时间】:2011-01-28 04:43:39
【问题描述】:

我使用 MVVM 模式在 WPF 中开发应用程序。 我正在显示一个带有节点和链接的有向图(见下图)。

http://free0.hiboox.com/images/1110/diapo1c36a4b95802846b8553d2fe9b9e6639.png?26

用户可以将节点从一个“单元”拖放到另一个。当用户放下一个节点时,它的位置会改变以使其在网格中对齐。我想要做的是在对齐例程期间调整节点位置时为节点设置动画。

节点、链接和分隔符都是显示在 ItemsControl 中的项目。它们的表示由一些 DataTemplates 控制,它们的位置由 Styles 控制。

我正在做的事情如下:

private void Align() {
    // Computations...
    TX = ... //Target X is set
    TY = ... //target Y is set
    X = TX;
    Y = TY; // X and Y setters fire PropertyChanged
}

<Style x:Key="NodeViewStyle">
    <Setter Property="Canvas.Left" Value="{Binding X, Mode=TwoWay}"/>
    <Setter Property="Canvas.Top" Value="{Binding Y, Mode=TwoWay}"/>

我想做的是:

private void Align() {
    // Computations...
    TX = ...
    TY = ... //TX and TY setters fire PropertyChanged
}

<Style x:Key="NodeViewStyle">
    <Setter Property="Canvas.Left" Value="{Binding X, Mode=TwoWay}"/>
    <Setter Property="Canvas.Top" Value="{Binding Y, Mode=TwoWay}"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding State}" Value="UPDATEPOS">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="{Binding TX}" Duration="0:0:1"
                                         Storyboard.TargetProperty="(Canvas.Left)"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>

但这在运行时不起作用,因为我无法绑定到 DoubleAnimation 的“To”属性(它是 Freezable)。

制作这种动态动画的最简单方法是什么?直接在视图模型中通过计时器为“X”属性设置动画?

【问题讨论】:

  • 您找到类似 MVVM 的解决方案了吗?如果您可以发布解决方案的 xaml 代码(更具体地说是“To”绑定问题)的一点 sn-p,那就太好了。谢谢

标签: wpf data-binding animation mvvm binding


【解决方案1】:

我解决了一个类似的问题,将辅助(附加)属性从 0 设置为 1,然后使用值转换器将所需的目标属性绑定到辅助属性。 有意义吗?

【讨论】:

  • 确实有些道理。对于一些非常不相似的问题,这是一种常见的解决方法,因为这种问题在 google 或 stackoverflow 上并不常见 :) 但是作为一个 MVVM 的忠实粉丝,我很失望地看到我在没有图案。太多的开销就是太多了。我希望这种行为在未来的框架修订中会变得更容易,就像他们在 InputGesture 中做的那样,因为它们是一个 Freezable 并且不接受命令绑定。 Freezables 很酷,但并非总是如此。
猜你喜欢
  • 2012-02-21
  • 2020-05-19
  • 2021-05-05
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多