如何获取stackpanel所在的列表框的名称?

时间:2011-12-19 10:49:46

标签: c# wpf listbox stackpanel

stackpanel的dragOver事件使我可以访问stackpanel作为发送者,但是如何获得stackpanel所在的列表框的名称(堆栈面板在datatemplate中定义)。这样做的原因是最终访问datatemplate生成的列表中的所有其他堆栈面板,所以如果我在这里咆哮错误的树,我会欣赏另一种访问其他堆栈面板的方法。谢谢,

4 个答案:

答案 0 :(得分:2)

更新(工作)回答

您需要在StackPanel上使用visual tree向上走VisualTreeHelper.GetParent,并在必要时对其他父母进行递归,直至找到ListBox(使用{{} 1}}或as运算符来检测您是否找到了它。)

为了增加方便性,或者如果您需要在其他方向遍历树(这涉及更多一些),您可以使用以LINQy格式(例如this one)公开遍历的包装器。

所有这些都说,您可能还想看看How can I find WPF controls by name or type?

答案 1 :(得分:1)

使用.Parent属性获取当前对象所在的对象。

答案 2 :(得分:1)

var listboxName = (stackpanel.Parent as ListBox).Name;

答案 3 :(得分:1)

根据this,StackPanel不会通过Parent属性到达逻辑树的根,因为它位于模板内,因此使用TemplatedParent属性。在其中你可能会得到一个ListBoxItem,它将listbox作为其父级。