C# 在ContentPresenter中查找控件的父级

C# 在ContentPresenter中查找控件的父级,c#,wpf,C#,Wpf,下面是我的代码,我正试图从内容演示器中的子控件中找到父“NodeItem” private static DependencyObject GetParentObject(DependencyObject child) { if(child == null) { return null; } var result = child as NodeItem

下面是我的代码,我正试图从内容演示器中的子控件中找到父“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,它成功了。如果你能把它作为答案贴出来,我会标记它。我已经把它作为答案添加到链接中,以供参考。顺便说一句,快速的谷歌搜索会给你答案。在提问之前,请做一些调查。我相信他们中的一些人也遇到过类似的问题,并找到了解决办法。如果你找不到任何有用的答案,那就把问题贴出来。我确实搜索过,也试过了。。如果你看到我的问题,我的代码也在里面。这不是我盲目发布的东西