Listbox Получить SelectedItem в ItemsPanel
У меня есть список с пользовательской стековой панелью (просто класс расширил стековую панель сейчас, но я надеюсь сделать некоторую анимацию здесь) в качестве ее элемента items. Теперь, когда выбор изменился, я подумал о создании хорошей анимации между последним выбранным элементом и текущим выбранным элементом.
Теперь моя проблема в том, как мне достать выбранный предмет на панели предметов?
Вот как я определяю свою панель товаров
<ItemsPanelTemplate>
<l:CustomStackPanel SelectedItem="{Binding SelectedItem,ElementName=listbox}" IsItemsHost="True" Orientation="Vertical"/>
</ItemsPanelTemplate>
Я создал свойство зависимости в моей пользовательской панели стека под названием SelectedItem
public UIElement SelectedItem
{
get { return (UIElement)GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedItem. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register("SelectedItem", typeof(UIElement), typeof(CustomStackPanel), new PropertyMetadata(null,selectionChanged));
И я подумал, что могу просто привязать selectedItem в моем списке к выбранному элементу в панели стека. Но этот подход просто не работает.
Другая мысль состояла в том, чтобы переопределить предварительный просмотр mousedown на панели стека и найти соответствующий элемент из дочерних элементов панели стека. Но опять же я не уверен, как найти предмет.
1 ответ
Используйте RelativeSource в вашей привязке
<ItemsPanelTemplate>
<l:CustomStackPanel SelectedItem="{Binding SelectedItem,RelativeSource={RelativeSource FindAncestor, AncestorType=x:Type ListBox}}" IsItemsHost="True" Orientation="Vertical"/>
</ItemsPanelTemplate>