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>
Другие вопросы по тегам