Saya tidak berpikir Anda perlu menulis panel atau menambahkan perilaku ke panel Anda, jika Anda memodelkan kelas Anda dengan benar, apa yang Anda coba lakukan dapat dicapai menggunakan ItemsControls dengan kemampuan untuk memilih item (yaitu ListBox) - Saya berasumsi Anda menggunakan MVVM.
Keuntungan dari pendekatan ini adalah Anda tidak membuat dan memelihara jenis panel tambahan yang mungkin tidak Anda perlukan. Ditambah lagi, semua yang ada di model dan model tampilan Anda dapat diuji unit sepenuhnya. Saya menyarankan untuk menggunakan atau memperluas kontrol dan container WPF yang ada bila memungkinkan, namun dalam kasus ini kita dapat melakukannya tanpanya.
Model Tampilan
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()
};
}
}
Model
public class ItemModel
{
public bool IsSelected {get;set;}
public ObservableCollection<ItemModel> Items {get;set;}
public ItemModel()
{
Items = new ObservableCollection<ItemModel>();
}
}
Lihat
<ListBox ItemsSource={Binding Items} SelectionMode=Single />
Setelah pengguna mengklik salah satu item di ListBox Anda, Anda harus mengatur properti IsSelected dari item terkait di ItemVM, pada perubahan properti ini, Anda dapat menambahkan item ini ke koleksi Item dari elemen teratas dalam daftar Anda.
Anda memiliki kendali penuh atas bagaimana Anda akan membuat Template ItemModel Anda, item teratas sekarang memiliki item dalam koleksi Items, yang dapat ditampilkan seperti yang Anda miliki di diagram Anda.
Mengenai Animasi Ini dapat dilakukan dengan menggunakan properti di belakang kode atau terlampir, idenya sederhana, Anda tahu di mana pengguna mengklik ListBox dan Anda seharusnya bisa mendapatkan posisi elemen teratas di ListBox, animasikan DataTemplate dari posisi klik saat ini ke bagian atas daftar
person
Shrinand
schedule
26.02.2013