Получить объект ListBox из ListBoxItem - PullRequest
0 голосов
/ 04 сентября 2018

Я работаю над обратным вызовом DependencyProperty (PropertyChangedCallback), где sender является объектом ListBoxItem. Мне нужно в коде для доступа к ListBox, который содержит ListBoxItem.

Возможно ли это?

Я пытался listBoxItem.Parent, но это null

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Попробуйте это:

private void SomeEventHandler(object sender, RoutedEventArgs e)
{
    ListBoxItem lbi = sender as ListBoxItem;
    ListBox lb = FindParent<ListBox>(lbi);
}

private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
    var parent = VisualTreeHelper.GetParent(dependencyObject);
    if (parent == null) return null;
    var parentT = parent as T;
    return parentT ?? FindParent<T>(parent);
}

FindParent<ListBox> должен найти родительский элемент ListBox в визуальном дереве.

0 голосов
/ 04 сентября 2018

И ответ:

VisualTreeHelper.GetParent(listBoxItem);

Для уточнения:

VisualTreeHelper.GetParent(visualObject);

Дает вам прямого родителя данного визуального объекта.

Это означает, что если вы хотите ListBox данного ListBoxItem, так как прямым родителем ListboxItem является элемент Panel, указанный в свойстве ItemsPanel, вам придется повторять его, пока не получите ListBox.

...