public static DependencyObject GetLogicalParent(DependencyObject element, DeferredElementTreeState treeState)
        {
            DependencyObject parent = null;

            if (treeState != null && treeState._oldLogicalParents.ContainsKey(element))
            {
                parent = treeState._oldLogicalParents[element];
            }
            else
            {
                UIElement e = element as UIElement;
                if (e != null)
                {
                    parent = e.GetUIParentCore();  // Overriden by FrameworkElement.
                }

                ContentElement ce = element as ContentElement;
                if (ce != null)
                {
                    parent = ce.GetUIParentCore(); // Overriden by FrameworkContentElement.
                }
            }

            return(parent);
        }
        internal static DependencyObject GetUIParentCore(DependencyObject o)
        {
            UIElement e = o as UIElement;

            if (e != null)
            {
                return(e.GetUIParentCore());
            }
            else
            {
                ContentElement ce = o as ContentElement;
                if (ce != null)
                {
                    return(ce.GetUIParentCore());
                }
                else
                {
                    UIElement3D e3D = o as UIElement3D;
                    if (e3D != null)
                    {
                        return(e3D.GetUIParentCore());
                    }
                }
                return(null);
            }
        }