从ListBoxItem获取ListBox对象

时间:2018-09-04 13:09:12

标签: c# .net wpf dependency-properties

我正在处理DependencyPropertyPropertyChangedCallback对象的sender回调(ListBoxItem)。我需要在代码中访问包含ListBox的{​​{1}}。

有可能吗?

我尝试过ListBoxItem,但它是listBoxItem.Parent

2 个答案:

答案 0 :(得分:5)

答案是:

VisualTreeHelper.GetParent(listBoxItem);

要澄清:

VisualTreeHelper.GetParent(visualObject);

为您提供给定视觉对象的直接父项。

这意味着如果您想要给定ListBox的{​​{1}},则由于ListBoxItem的直接父级是ListboxItem属性指定的Panel元素,您将必须重复一遍,直到您得到ItemsPanel

答案 1 :(得分:1)

尝试一下:

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