【发布时间】: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