6

ItemsControl内のアイテムのアニメーション化に関して同様の質問が寄せられていることを知っているので、受け入れ可能な回答が投稿されている場合は、正しい方向に向けることができれば素晴らしいと思います。

データバインドされたTreeViewがあり、階層は1レベルの深さしかありません。X個の子を持つX個のルートノードを持つことができます。しかし、それはそれが得るのと同じくらい深いです。私が直面している問題は、データバインドされたコレクション内のアイテムの追加/移動/削除をアニメーション化するための最良の方法がどのようになっているのかということです。

TreeViewのItemContainerStyleはカスタムControlTemplateに設定され、MouseOverとSelectedスタイルを提供します。次に、HierarchialDataTemplateを使用して、バインドされているさまざまなタイプのアイテムをさらにレイアウトします。

アイテムの拡張をアニメーション化する方法を示す多くの例を見つけましたが、アイテムが追加/移動/削除されたときのアニメーション化に関してはそれほど多くはありません。ここにある1つの例は 、私が求めているもののほとんどを示していますが、言い換えれば無関係と見なされる多くのコードとライブラリ参照が組み込まれています。私は、同様の機能の独自のバージョンを組み込むことに反対していません。同じ目標を達成するために、イベントトリガーまたは同等のものにフックできることを望んでいます。

私はどのソリューションにも本当にオープンであり、「機能しない」修正が必要なものを何も書いていなかったため、サンプルコードを投稿していません。私は多かれ少なかれどこから始めるべきかについての意見を探しています。追加/移動/削除をアニメーション化する方法を知っている限り、好みや全体的な最終効果に合わせてコードを変更および変更できるため、適用されるアニメーションのタイプも関係ありません。

4

1 に答える 1

2

あなたは「この問題にどのように取り組むべきか」と尋ねていると思うので。私はあなたにいくつかの提案をすることができます。

手元に2つの基本的な問題があります。

  • あなたが達成しようとしている効果の仕組み
  • プログラムのアーキテクチャに影響を与える配線

最初の問題については、単純な非MVVMアプリケーションを使用してエフェクトのプロトタイプを作成することをお勧めします。特にVisualStateManager、参照したリンクのアイデアと、Animationすでに使い慣れている概念と古き良きコードビハインドを使用して、複雑なライブラリを使用せずに、ツリーの挿入、移動、および削除の効果を機能させることができます。後ですべてのコードビハインドを取り除こうとしていること、およびこれはプロトタイピング専用であることを忘れないでください。基本的に、あなたはそのリンクをコードビハインドに移植し、それが使用するすべてのくだらないものを削除しています。

達成しようとしている効果が得られると、「緩い結合」を使用してビューモデルで機能させるという古くからのMVVMの問題が発生します。WPFはデータバインディングプロパティを単純にするため、MVVMは世界中のデータのMVVMです。しかし、操作には、イベントを操作にきれいに接続するための多くのハードルがあり、すべてのMVVMフレームワークはそれを異なる方法で行うようです。MVVMLightにはEventToCommand、あり、System.Windows.InteractivityありCallMethodAction、そしてそれは続きます。

したがって、効果を選択したMVVMフレームワークと統合するには、そのフレームワークのメカニズムを使用して、イベントを操作に接続します。ただし、接着剤を機能させる別の方法が見つからない場合は、いつでも少しのコードビハインドを使用してビューを操作したり、イベントをビューモデルに直接ディスパッチしたりできます。それはあなた次第です。

于 2011-05-18T01:50:23.800 に答える