パネルを作成したり、パネルに動作を追加したりする必要はないと思います。クラスを正しくモデル化すれば、アイテムを選択する機能を備えたItemsControls(つまりListBox)を使用して達成可能です-私はあなたが使用していると仮定していますMVVM。
このアプローチの利点は、おそらく必要のない追加のパネル タイプを作成および維持しないことです。さらに、モデルとビューモデルのすべてを完全に単体テストできます。可能な限り、既存の WPF コントロールとコンテナーを使用または拡張することをお勧めしますが、この場合、それがなくてもうまくいく可能性があります。
ビューモデル
public class ItemsVM
{
// You can always keep the items sorted based on you business rules
public ObservableCollection<ItemModel> Items {get;set;}
public ItemVM()
{
Items = new ObservableCollection<ItemModel>(){
new ItemModel(), new ItemModel()
};
}
}
モデル
public class ItemModel
{
public bool IsSelected {get;set;}
public ObservableCollection<ItemModel> Items {get;set;}
public ItemModel()
{
Items = new ObservableCollection<ItemModel>();
}
}
意見
<ListBox ItemsSource={Binding Items} SelectionMode=Single />
ユーザーが ListBox 内の項目の 1 つをクリックしたら、ItemVM 内の対応する項目の IsSelected プロパティを設定する必要があります。このプロパティの変更により、この項目をリストの最上位要素の Items コレクションに追加できます。
ItemModel をどのようにテンプレート化するかを完全に制御できます。最上位のアイテムには Items コレクションにアイテムが含まれるようになり、ダイアグラムにあるように表示できます。
アニメーションについて
これは、コード ビハインドまたは添付プロパティを使用して行うことができます。アイデアは単純です。ユーザーが ListBox をクリックした場所を知っているので、ListBox の一番上の要素の位置を取得し、DataTemplate をアニメーション化する必要があります。リストの一番上への現在のクリック位置