Desarrollo una aplicación en WPF usando el patrón MVVM. Estoy mostrando un gráfico orientado, con nodos y enlaces (ver la siguiente imagen).Animación dinámica usando storyboards
http://free0.hiboox.com/images/1110/diapo1c36a4b95802846b8553d2fe9b9e6639.png?26
El usuario puede arrastrar y soltar los nodos de una "célula" a otro. Cuando el usuario suelta un nodo, su posición cambia para alinearlo en la cuadrícula. Lo que quiero hacer es animar el nodo cuando se ajusta su posición durante la rutina de alineación.
Los nodos, enlaces y separadores son todos los elementos que se muestran en un ItemsControl. Su representación se controla con algunas plantillas de datos y su posición con estilos.
Lo que estoy haciendo es el siguiente:
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}"/>
Lo que quiero hacer es la siguiente:
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>
Pero esto no funciona en tiempo de ejecución, ya que no puedo obligar a "Para "propiedad de mi DoubleAnimation (es un Freezable).
¿Cuál es la manera más simple de hacer una animación tan dinámica? ¿Animar la propiedad "X" a través de un temporizador directamente en el modelo de vista?
¿Encontró una solución tipo MVVM para esto? Sería genial si pudieras publicar un pequeño fragmento de tu código xaml (más específicamente el tema 'To' vinculante) de tu solución. Gracias – Peanut