我怎么能得到一个stackpanel是在列表框的名称

本文关键字:列表 stackpanel 一个 怎么能 | 更新日期: 2023-09-27 18:18:10

一个stackpanel的dragOver事件让我访问stackpanel作为发送者,但是我怎么能得到listbox的名称,stackpanel是在(stack panel是在datatemplate中定义的)。这样做的原因是最终访问由datatemplate生成的列表中的所有其他堆栈面板,所以如果我在这里搜索错误的树,我将欣赏访问其他堆栈面板的替代方法。谢谢你,

.

我怎么能得到一个stackpanel是在列表框的名称

更新(工作)回答

您需要在StackPanel上的VisualTreeHelper.GetParent上行走可视化树,并在必要时递归到进一步的父级,直到找到ListBox(使用asis操作符来检测您已经找到了它)。

为了更方便,或者如果您需要从其他方向遍历树(这有点复杂),您可以使用一个包装器,以LINQy格式公开遍历,例如下面这个。

说了这么多,您可能还想看看如何通过名称或类型找到WPF控件?

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

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

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