我正在研究DependencyProperty
回调(PropertyChangedCallback
),其中sender
是ListBoxItem
对象。我需要在代码中访问包含ListBox
的ListBoxItem
。
可能吗 ?
我试过listBoxItem.Parent
,但它是null
试试这个:
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
项。
答案是:
VisualTreeHelper.GetParent(listBoxItem);
澄清:
VisualTreeHelper.GetParent(visualObject);
为您提供给定视觉对象的直接父级。
这意味着如果你想要给定ListBox
的ListBoxItem
,因为ListboxItem
的直接父代是ItemsPanel
属性指定的Panel元素,你将不得不重复它,直到你得到ListBox
。