Tengo algunos Listboxes en mi aplicación vinculados a ObservableCollections, y me gustaría animar un elemento si se elimina.Animar elemento eliminado en Listbox
Ya encontré una pregunta sobre la animación de elementos agregados mediante el uso del evento FrameworkElement.Loaded, pero, por supuesto, eso no funciona de la misma manera con el evento descargado.
¿Hay alguna manera de hacer esto de forma que pueda usarse en una plantilla de datos?
EDITAR: Me he conectado al evento CollectionChanged en mis ItemsSource e intenté aplicar una animación manualmente. Actualmente se ve así:
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);
El problema es que no funciona en absoluto. El ítem simplemente sigue apareciendo. El elemento todavía está allí cuando se llama al método, por lo que no debería estar reproduciendo la animación antes de que desaparezca? ¿O lo estoy haciendo completamente mal?
En mi caso tengo 3dparty INotifyCollectionChanged implementado por Obtics y cambiado ocasionalmente por eventos del lado del servidor ... No tengo idea de cómo animar la eliminación de elementos aquí ... Probablemente debería envolverlo por INotifyCollectionChanged personalizado y simplemente retrasar la eliminación del evento personalizado en aumento para animación. Pero esto puede funcionar solo para 1 artículo por evento y por animación. El contrato INotifyCollectionChanged supone que cada instancia cambia su colección inmediatamente por los eventos y, si tengo un retraso, el próximo evento me enviará un índice de elementos, suponiendo que ya mantuve mi colección por índice anterior. –