我使用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属性(它是一个Freezable)。
做这种动态动画最简单的方法是什么?直接在视图模型中通过定时器动画“X”属性?
您是否找到类似MVVM的解决方案?如果您可以发布您的解决方案的xaml代码(更具体地说是“To”绑定问题)的一小段代码,那将是非常好的。谢谢 – Peanut 2010-06-09 14:16:41