Sviluppo un'applicazione in WPF utilizzando il pattern MVVM. Sto visualizzando un grafico orientato, con nodi e collegamenti (vedi immagine seguente).Animazione dinamica tramite gli storyboard
http://free0.hiboox.com/images/1110/diapo1c36a4b95802846b8553d2fe9b9e6639.png?26
L'utente può trascinare i nodi da un "cella" ad un altro. Quando l'utente rilascia un nodo, la sua posizione viene modificata per allinearlo nella griglia. Quello che voglio fare è animare il nodo quando la sua posizione viene regolata durante la routine di allineamento.
I nodi, i collegamenti e i separatori sono tutti elementi visualizzati in ItemsControl. La loro rappresentazione è controllata con alcuni DataTemplates e la loro posizione con Styles.
Quello che sto facendo è la seguente:
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}"/>
Quello che voglio fare è il seguente:
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>
Ma questo non funziona in fase di esecuzione, dal momento che non può legarsi a "Per "proprietà del mio DoubleAnimation (è un Freezable).
Qual è il modo più semplice per eseguire un'animazione così dinamica? Animare la proprietà "X" attraverso un timer direttamente nel viewmodel?
hai trovato una soluzione simile a MVVM a questo? Sarebbe fantastico se potessi pubblicare un piccolo frammento del tuo codice xaml (più specificamente il problema di associazione "A") della tua soluzione. Grazie – Peanut