私は、私のアプリでObservableCollectionsにバインドされたリストボックスをいくつか持っていて、アイテムが削除されているとアニメーション化したいと思います。リストボックスで削除された項目をアニメートする
FrameworkElement.Loadedイベントを使用して追加されたアイテムをアニメーション化することについての質問が既に見つかりましたが、もちろんUnloadedイベントでは同じように動作しません。
これをデータ型で使用できる方法はありますか?
EDIT:ItemsSourceのCollectionChangedイベントに接続し、手動でアニメーションを適用しようとしました。現在、次のようになっています:
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);
問題は、まったく動作しません。アイテムはまだ飛び去るだけです。メソッドが呼び出されるとアイテムはまだそこにあるので、アニメーションが消える前にアニメーションを再生してはいけませんか?それとも、私はそれを完全に間違っているのですか?
私の場合は、Obpertによって実装された3dparty INotifyCollectionChangedがあり、時にはサーバー側のイベントによって変更されています...ここでアイテムのアニメーションをどのようにアニメーション化するかわからない...おそらくカスタムINotifyCollectionChangedでラップし、アニメーション。しかし、これはイベントごととアニメーションごとに1つのアイテムに対してのみ機能します。 INotifyCollectionChangedコントラクトは、すべてのインスタンスがイベントによってすぐにコレクションを変更することを前提としています。遅延がある場合、次のイベントは、以前のインデックスでコレクションを保持していると仮定して、 –