Ho alcune liste nella mia app associate a ObservableCollections e vorrei animare un oggetto se è stato rimosso.Animazione di elementi rimossi nella casella di riepilogo
Ho già trovato una domanda sull'animazione di elementi aggiunti utilizzando l'evento FrameworkElement.Loaded, ma ovviamente non funziona allo stesso modo con l'evento Unloaded.
C'è un modo per farlo in un modo che può essere utilizzato in un datatemplate?
EDIT: mi sono collegato all'evento CollectionChanged nella mia ItemsSource e ho provato ad applicare manualmente un'animazione. Attualmente appare così:
ListBoxItem item = stack.ItemContainerGenerator.ContainerFromIndex(0) as ListBoxItem;
item.LayoutTransform = new ScaleTransform(1, 1);
DoubleAnimation scaleAnimation = new DoubleAnimation();
scaleAnimation.From = 1;
scaleAnimation.To = 0;
scaleAnimation.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 500));
ScaleTransform transform = (ScaleTransform)item.LayoutTransform;
transform.BeginAnimation(ScaleTransform.ScaleYProperty, scaleAnimation);
Il problema è che non funziona affatto. L'oggetto si apre ancora. L'oggetto è ancora lì quando viene chiamato il metodo, quindi non dovrebbe giocare l'animazione prima che scompaia? O sto sbagliando completamente?
Nel mio caso ho 3dparty INotifyCollectionChanged implementato da Obtics e cambiato di tanto in tanto da eventi lato server ... Non ho idea di come animare la rimozione degli oggetti qui ... Probabilmente dovrei avvolgerlo con l'INotifyCollectionChanged personalizzato e ritardare la rimozione dell'evento personalizzato in aumento per animazione. Ma questo può funzionare solo per 1 elemento per evento e per animazione. Il contratto INotifyCollectionChanged presuppone che ogni istanza modifichi immediatamente la propria raccolta in base agli eventi e, se ho un ritardo, il prossimo evento mi invierà l'indice degli elementi presumendo che abbia già mantenuto la mia raccolta per indice precedente. –