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