C# 在ContentPresenter中查找控件的父级
下面是我的代码,我正试图从内容演示器中的子控件中找到父“NodeItem”C# 在ContentPresenter中查找控件的父级,c#,wpf,C#,Wpf,下面是我的代码,我正试图从内容演示器中的子控件中找到父“NodeItem” private static DependencyObject GetParentObject(DependencyObject child) { if(child == null) { return null; } var result = child as NodeItem
private static DependencyObject GetParentObject(DependencyObject child)
{
if(child == null)
{
return null;
}
var result = child as NodeItem;
if (result != null)
{
return result;
}
ContentElement contentElement = child as ContentElement;
if(contentElement != null)
{
DependencyObject parent = ContentOperations.GetParent(contentElement);
if(parent != null)
{
return GetParentObject(parent);
}
}
FrameworkElement fe = child as FrameworkElement;
if(fe != null)
{
DependencyObject parent = fe.Parent;
if(parent != null)
{
return GetParentObject(parent);
}
}
return GetParentObject(VisualTreeHelper.GetParent(child));
}
这是史努比的视觉树
我在标签上处理了OnDrop,我想从事件处理程序内部访问nodeitem
这是XAML
<Grid>
<!--
This border indicates that node is selected.
Normally it is transparent, but when 'IsSelected' is set
to 'true' the border brush becomes blue and its background
becomds light blue.
-->
<Border
x:Name="selectionBorder"
Margin="{TemplateBinding Margin}"
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="2">
<Border.Style>
<Style>
<Setter Property="Control.Effect">
<Setter.Value>
<DropShadowEffect
Opacity="0.1"
ShadowDepth="1"
Color="#FF151414" />
</Setter.Value>
</Setter>
</Style>
</Border.Style>
<!--
User-defined node content is presented here.
-->
<ContentPresenter />
</Border>
</Grid>
Content Presenter稍后将替换为另一个网格,该网格具有树中显示的控件。在MSDN上找到答案:
private T FindParent(DependencyObject子对象)
其中T:DependencyObject
{
T parent=visualtreeheloper.GetParent(child)作为T;
如果(父项!=null)
{
返回父母;
}
其他的
{
返回FindParent(父级);
}
}
在MSDN上找到答案:
private T FindParent(DependencyObject子对象)
其中T:DependencyObject
{
T parent=visualtreeheloper.GetParent(child)作为T;
如果(父项!=null)
{
返回父母;
}
其他的
{
返回FindParent(父级);
}
}
上一个代码示例中的错误,修复如下:
private T FindParent<T>(DependencyObject child) where T : DependencyObject
{
DependencyObject immediateParent = VisualTreeHelper.GetParent(child);
T parent = immediateParent as T;
if (parent != null)
return parent;
else
return FindParent<T>(immediateParent);
}
private T FindParent(DependencyObject子对象),其中T:DependencyObject
{
DependencyObject immediateParent=VisualTreeHelper.GetParent(子级);
T父项=与T直接相关;
如果(父项!=null)
返回父母;
其他的
返回FindParent(即时支付);
}
上一个代码示例中的错误,修复如下:
private T FindParent<T>(DependencyObject child) where T : DependencyObject
{
DependencyObject immediateParent = VisualTreeHelper.GetParent(child);
T parent = immediateParent as T;
if (parent != null)
return parent;
else
return FindParent<T>(immediateParent);
}
private T FindParent(DependencyObject子对象),其中T:DependencyObject
{
DependencyObject immediateParent=VisualTreeHelper.GetParent(子级);
T父项=与T直接相关;
如果(父项!=null)
返回父母;
其他的
返回FindParent(即时支付);
}
请粘贴您的xaml。请检查此链接:谢谢@swamy,它成功了。如果你能把它作为答案贴出来,我会标记它。我已经把它作为答案添加到链接中,以供参考。顺便说一句,快速的谷歌搜索会给你答案。在提问之前,请做一些调查。我相信他们中的一些人也遇到过类似的问题,并找到了解决办法。如果你找不到任何有用的答案,那就把问题贴出来。我确实搜索过,也试过了。。如果你看到我的问题,我的代码也在里面。这不是我盲目发布的东西。请粘贴你的xaml。请检查此链接:谢谢@swamy,它成功了。如果你能把它作为答案贴出来,我会标记它。我已经把它作为答案添加到链接中,以供参考。顺便说一句,快速的谷歌搜索会给你答案。在提问之前,请做一些调查。我相信他们中的一些人也遇到过类似的问题,并找到了解决办法。如果你找不到任何有用的答案,那就把问题贴出来。我确实搜索过,也试过了。。如果你看到我的问题,我的代码也在里面。这不是我盲目发布的东西