Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取stackpanel所在的列表框的名称?_C#_Wpf_Listbox_Stackpanel - Fatal编程技术网

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

C# 如何获取stackpanel所在的列表框的名称?,c#,wpf,listbox,stackpanel,C#,Wpf,Listbox,Stackpanel,stackpanel的dragOver事件使我可以作为发送方访问stackpanel,但如何获取stackpanel所在列表框的名称(stack panel在datatemplate中定义)。这样做的原因是为了最终访问datatemplate生成的列表中的所有其他StackPanel,因此,如果我在这里选错了树,我希望有一种访问其他StackPanel的替代方法。谢谢 Dan。使用.Parent属性获取当前对象所在的对象。使用.Parent属性获取当前对象所在的对象。更新(工作)答案 您需要在S

stackpanel的dragOver事件使我可以作为发送方访问stackpanel,但如何获取stackpanel所在列表框的名称(stack panel在datatemplate中定义)。这样做的原因是为了最终访问datatemplate生成的列表中的所有其他StackPanel,因此,如果我在这里选错了树,我希望有一种访问其他StackPanel的替代方法。谢谢


Dan。

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

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

更新(工作)答案

您需要在
StackPanel
上遍历with,如有必要,在其他父项上递归,直到找到
列表框(使用
as
is
操作符来检测您是否找到了它)

为了增加便利性,或者如果需要在其他方向遍历树(这有点复杂),可以使用包装器以LINQy格式公开遍历,例如

所有这些,你可能还想看看。

更新(工作)答案

您需要在
StackPanel
上遍历with,如有必要,在其他父项上递归,直到找到
列表框(使用
as
is
操作符来检测您是否找到了它)

为了增加便利性,或者如果需要在其他方向遍历树(这有点复杂),可以使用包装器以LINQy格式公开遍历,例如


综上所述,您可能还想看一看。

根据StackPanel,父属性不会到达逻辑树的根,因为它位于模板内,所以请使用TemplatedParent属性。在其中,您可能会得到一个ListBoxItem,它将listbox作为其父项。

根据StackPanel,父属性不会到达逻辑树的根,因为它位于模板中,所以请使用TemplatedParent属性。在其中,您可能会得到一个ListBoxItem,它将listbox作为其父项。

非常感谢您的回复-父属性为null tho!?当我将stackpanel包装在一个边框控件中时,父属性显示边框,但当我去掉它,使stackpanel成为datatemplate中的“根”控件时,它为null-因此我假设它不能访问数据模板之外的任何内容??谢谢。那么下一步就是遵循Jon的方法。非常感谢您的回复-父属性为空tho!?当我将stackpanel包装在一个边框控件中时,父属性显示边框,但当我去掉它,使stackpanel成为datatemplate中的“根”控件时,它为null-因此我假设它不能访问数据模板之外的任何内容??谢谢。那么下一步就是遵循Jon的方法。非常感谢您的回复-父属性为空tho!?当我将stackpanel包装在一个边框控件中时,父属性显示边框,但当我去掉它,使stackpanel成为datatemplate中的“根”控件时,它为null-因此我假设它不能访问数据模板之外的任何内容??谢谢。非常感谢您的回复-父属性为空tho!?当我将stackpanel包装在一个边框控件中时,父属性显示边框,但当我去掉它,使stackpanel成为datatemplate中的“根”控件时,它为null-因此我假设它不能访问数据模板之外的任何内容??谢谢。非常感谢Jon,我来看看这些,父属性解决方案似乎对我不起作用。@DanielMcNulty:对不起,我忘了。。。生锈了。看到更新的答案,你需要在视觉树上行走。完美乔恩!!解决了一个让我头疼的问题。谢谢,伙计。非常感谢Jon,我来看看这些,父属性解决方案似乎对我不起作用。@DanielMcNulty:对不起,我忘了。。。生锈了。看到更新的答案,你需要在视觉树上行走。完美乔恩!!解决了一个让我头疼的问题。谢谢你,伙计。
var listboxName = (stackpanel.Parent as ListBox).Name;