我正在处理DependencyProperty
是PropertyChangedCallback
对象的sender
回调(ListBoxItem
)。我需要在代码中访问包含ListBox
的{{1}}。
有可能吗?
我尝试过ListBoxItem
,但它是listBoxItem.Parent
答案 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
。