我怎么能得到一个stackpanel是在列表框的名称
本文关键字:列表 stackpanel 一个 怎么能 | 更新日期: 2023-09-27 18:18:10
一个stackpanel的dragOver事件让我访问stackpanel作为发送者,但是我怎么能得到listbox的名称,stackpanel是在(stack panel是在datatemplate中定义的)。这样做的原因是最终访问由datatemplate生成的列表中的所有其他堆栈面板,所以如果我在这里搜索错误的树,我将欣赏访问其他堆栈面板的替代方法。谢谢你,
丹.
更新(工作)回答
您需要在StackPanel
上的VisualTreeHelper.GetParent
上行走可视化树,并在必要时递归到进一步的父级,直到找到ListBox
(使用as
或is
操作符来检测您已经找到了它)。
为了更方便,或者如果您需要从其他方向遍历树(这有点复杂),您可以使用一个包装器,以LINQy格式公开遍历,例如下面这个。
说了这么多,您可能还想看看如何通过名称或类型找到WPF控件?
使用。parent属性获取当前对象所在的对象
var listboxName = (stackpanel.Parent as ListBox).Name;
根据这个,StackPanel不会通过Parent属性到达逻辑树的根,因为它位于模板内部,所以使用TemplatedParent属性。其中你可能会得到一个ListBoxItem,它将listbox作为它的父元素。