Я не думаю, что вам нужно писать панель или добавлять поведение к вашей панели, если вы правильно моделируете свои классы, то, что вы пытаетесь сделать, достижимо с помощью ItemsControls с возможностью выбора элементов (т.е. ListBox) - я предполагаю, что вы используете МВВМ.
Преимущество этого подхода в том, что вы не создаете и не поддерживаете дополнительный тип панели, который вам, вероятно, не нужен. Кроме того, все в вашей модели и модели просмотра может быть полностью протестировано. Я рекомендую использовать или расширять существующие элементы управления и контейнеры 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, вы должны установить свойство IsSelected соответствующего элемента в ItemVM, при изменении этого свойства вы можете добавить этот элемент в коллекцию Items верхнего элемента в вашем списке.
У вас есть полный контроль над тем, как вы будете шаблонировать свою ItemModel, верхний элемент теперь имеет элемент в коллекции Items, который может быть показан так, как у вас есть на вашей диаграмме.
Относительно анимации Это можно сделать либо с помощью кода программной части, либо с помощью прикрепленного свойства. Идея проста: вы знаете, где пользователь щелкнул элемент списка, и вы сможете получить положение верхнего элемента в ListBox, анимируйте DataTemplate из текущей позиции клика в верхнюю часть списка
person
Shrinand
schedule
26.02.2013