Esempio n. 1
0
        /// <summary>
        /// This method is an alternative to WPF's
        /// <see cref="VisualTreeHelper.GetParent"/> method, which also
        /// supports content elements. Keep in mind that for content element,
        /// this method falls back to the logical tree of the element!
        /// </summary>
        /// <param name="child">The item to be processed.</param>
        /// <returns>The submitted item's parent, if available. Otherwise
        /// null.</returns>
        public static DependencyObject GetParentObject(DependencyObject child)
        {
            if (child == null)
            {
                return(null);
            }
            ContentElement contentElement = child as ContentElement;

            if (contentElement != null)
            {
                DependencyObject parent = ContentOperations.GetParent(contentElement);
                if (parent != null)
                {
                    return(parent);
                }

                FrameworkContentElement fce = contentElement as FrameworkContentElement;
                return(fce != null ? fce.Parent : null);
            }

            //if it's not a ContentElement, rely on VisualTreeHelper
            return(VisualTreeHelper.GetParent(child));
        }
Esempio n. 2
0
        /// <summary>
        /// Gets the parent for specified dependency object.
        /// </summary>
        /// <param name="dependencyObject">The dependency object</param>
        /// <returns>The parent object or null if there is no parent.</returns>
        public static DependencyObject GetParent(this DependencyObject dependencyObject)
        {
            if (dependencyObject == null)
            {
                throw new ArgumentNullException("dependencyObject");
            }

            var ce = dependencyObject as ContentElement;

            if (ce != null)
            {
                var parent = ContentOperations.GetParent(ce);
                if (parent != null)
                {
                    return(parent);
                }

                var fce = ce as FrameworkContentElement;
                return(fce != null ? fce.Parent : null);
            }

            return(VisualTreeHelper.GetParent(dependencyObject));
        }
Esempio n. 3
0
        /// <summary>
        /// This method is an alternative to WPF's
        /// <see cref="VisualTreeHelper.GetParent"/> method, which also
        /// supports content elements. Do note, that for content element,
        /// this method falls back to the logical tree of the element.
        /// </summary>
        /// <param name="child">The item to be processed.</param>
        /// <returns>The submitted item's parent, if available. Otherwise null.</returns>
        public static DependencyObject GetParentObject(DependencyObject child)
        {
#pragma warning disable IDE0019 // Use pattern matching - Build.Bat Error Happens if We Do
            if (child == null)
            {
                return(null);
            }
            ContentElement contentElement = child as ContentElement;
            if (contentElement != null)
            {
                DependencyObject parent = ContentOperations.GetParent(contentElement);
                if (parent != null)
                {
                    return(parent);
                }
                FrameworkContentElement fce = contentElement as FrameworkContentElement;
                return(fce?.Parent);
            }
            // If it's not a ContentElement, rely on VisualTreeHelper
            return(VisualTreeHelper.GetParent(child));

#pragma warning restore IDE0019 // Use pattern matching - Build.Bat Error Happens if We Do
        }
Esempio n. 4
0
        /// <summary>
        /// This method is an alternative to WPF's
        /// <see cref="VisualTreeHelper.GetParent"/> method, which also
        /// supports content elements. Do note, that for content element,
        /// this method falls back to the logical tree of the element.
        /// </summary>
        /// <param name="child">The item to be processed.</param>
        /// <returns>The submitted item's parent, if available. Otherwise null.</returns>
        public static DependencyObject GetParentObject(DependencyObject child)
        {
            if (child == null)
            {
                return(null);
            }

            if (child is ContentElement contentElement)
            {
                var parent = ContentOperations.GetParent(contentElement);

                if (parent != null)
                {
                    return(parent);
                }

                var fce = contentElement as FrameworkContentElement;
                return(fce?.Parent);
            }

            // If it's not a ContentElement, rely on VisualTreeHelper
            return(VisualTreeHelper.GetParent(child));
        }
Esempio n. 5
0
		static DependencyObject GetParentObject(DependencyObject child)
		{
			if (child == null) return null;

			ContentElement contentElement = child as ContentElement;
			if (contentElement != null)
			{
				DependencyObject parent = ContentOperations.GetParent(contentElement);
				if (parent != null) return parent;

				FrameworkContentElement fce = contentElement as FrameworkContentElement;
				return fce != null ? fce.Parent : null;
			}

			FrameworkElement frameworkElement = child as FrameworkElement;
			if (frameworkElement != null)
			{
				DependencyObject parent = frameworkElement.Parent;
				if (parent != null) return parent;
			}

			return VisualTreeHelper.GetParent(child);
		}
Esempio n. 6
0
        private static DependencyObject GetParent(DependencyObject obj)
        {
            if (obj == null)
            {
                return(null);
            }

            ContentElement ce = obj as ContentElement;

            if (ce != null)
            {
                DependencyObject parent = ContentOperations.GetParent(ce);
                if (parent != null)
                {
                    return(parent);
                }

                FrameworkContentElement fce = ce as FrameworkContentElement;
                return(fce != null ? fce.Parent : null);
            }

            return(VisualTreeHelper.GetParent(obj));
        }
Esempio n. 7
0
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 부모 구하기 - GetParent(child)

        /// <summary>
        /// 부모 구하기
        /// </summary>
        /// <param name="child">자식</param>
        /// <returns>부모</returns>
        public static DependencyObject GetParent(this DependencyObject child)
        {
            if (child == null)
            {
                return(null);
            }

            ContentElement childContentElement = child as ContentElement;

            if (childContentElement != null)
            {
                DependencyObject parent = ContentOperations.GetParent(childContentElement);

                if (parent != null)
                {
                    return(parent);
                }

                FrameworkContentElement childFrameworkContentElement = childContentElement as FrameworkContentElement;

                return(childFrameworkContentElement != null ? childFrameworkContentElement.Parent : null);
            }

            FrameworkElement childFrameworkElement = child as FrameworkElement;

            if (childFrameworkElement != null)
            {
                DependencyObject parent = childFrameworkElement.Parent;

                if (parent != null)
                {
                    return(parent);
                }
            }

            return(VisualTreeHelper.GetParent(child));
        }
Esempio n. 8
0
        /// <summary>
        /// This method is an alternative to WPF's
        /// <see cref="VisualTreeHelper.GetParent"/> method, which also
        /// supports content elements. Keep in mind that for content element,
        /// this method falls back to the logical tree of the element!
        /// </summary>
        /// <param name="child">The item to be processed.</param>
        /// <returns>The submitted item's parent, if available. Otherwise
        /// null.</returns>
        public static DependencyObject GetAncestorObject(this DependencyObject child)
        {//http://www.hardcodet.net/2008/02/find-wpf-parent
            if (child == null)
            {
                return(null);
            }

            //handle content elements separately
            ContentElement contentElement = child as ContentElement;

            if (contentElement != null)
            {
                DependencyObject parent = ContentOperations.GetParent(contentElement);
                if (parent != null)
                {
                    return(parent);
                }

                FrameworkContentElement fce = contentElement as FrameworkContentElement;
                return(fce != null ? fce.Parent : null);
            }

            //also try searching for parent in framework elements (such as DockPanel, etc)
            FrameworkElement frameworkElement = child as FrameworkElement;

            if (frameworkElement != null)
            {
                DependencyObject parent = frameworkElement.Parent;
                if (parent != null)
                {
                    return(parent);
                }
            }

            //if it's not a ContentElement/FrameworkElement, rely on VisualTreeHelper
            return(VisualTreeHelper.GetParent(child));
        }
Esempio n. 9
0
        /// <summary>
        /// This method is an alternative to WPF's
        /// <see cref="VisualTreeHelper.GetParent"/> method, which also
        /// supports content elements. Keep in mind that for content element,
        /// this method falls back to the logical tree of the element!
        /// </summary>
        /// <param name="child">The item to be processed.</param>
        /// <returns>The submitted item's parent, if available. Otherwise
        /// null.</returns>
        public static DependencyObject GetParentObject(this DependencyObject child)
        {
            if (child == null)
            {
                return(null);
            }

            //handle content elements separately
            var contentElement = child as ContentElement;

            if (contentElement != null)
            {
                DependencyObject parent = ContentOperations.GetParent(contentElement);
                if (parent != null)
                {
                    return(parent);
                }

                var fce = contentElement as FrameworkContentElement;
                return(fce != null ? fce.Parent : null);
            }

            //also try searching for parent in framework elements (such as DockPanel, etc)
            var frameworkElement = child as FrameworkElement;

            if (frameworkElement != null)
            {
                DependencyObject parent = frameworkElement.Parent;
                if (parent != null)
                {
                    return(parent);
                }
            }

            //if it's not a ContentElement/FrameworkElement, rely on VisualTreeHelper
            return(VisualTreeHelper.GetParent(child));
        }
Esempio n. 10
0
        /// <summary>
        /// This method is an alternative to WPF's <see cref="VisualTreeHelper.GetParent"/> method, which also
        /// supports content elements. Keep in mind that for content element, this method falls back to the logical tree of the element!
        /// </summary>
        /// <param name="iChild">The item to be processed.</param>
        /// <returns>The submitted item's parent, if available. Otherwise null.</returns>
        public static DependencyObject GetParentObject(this DependencyObject iChild)
        {
            if (iChild == null)
            {
                return(null);
            }

            // Handle content elements separately.
            ContentElement contentElement = iChild as ContentElement;

            if (contentElement != null)
            {
                DependencyObject parent = ContentOperations.GetParent(contentElement);
                if (parent != null)
                {
                    return(parent);
                }

                FrameworkContentElement frameworkContentElement = contentElement as FrameworkContentElement;
                return(frameworkContentElement != null ? frameworkContentElement.Parent : null);
            }

            // Also try searching for parent in framework elements (such as DockPanel, etc).
            FrameworkElement frameworkElement = iChild as FrameworkElement;

            if (frameworkElement != null)
            {
                DependencyObject parent = frameworkElement.Parent;
                if (parent != null)
                {
                    return(parent);
                }
            }

            // If it's not a ContentElement/FrameworkElement, rely on VisualTreeHelper.
            return(VisualTreeHelper.GetParent(iChild));
        }
Esempio n. 11
0
        private static DependencyObject GetParentObject(DependencyObject child)
        {
            switch (child)
            {
            case null:
                return(null);

            case ContentElement contentElement:
            {
                DependencyObject parent = ContentOperations.GetParent(contentElement);
                if (parent != null)
                {
                    return(parent);
                }

                return(contentElement is FrameworkContentElement fce ? fce.Parent : null);
            }
            }

            DependencyObject childParent = VisualTreeHelper.GetParent(child);

            if (childParent != null)
            {
                return(childParent);
            }

            if (child is FrameworkElement frameworkElement)
            {
                DependencyObject parent = frameworkElement.Parent;
                if (parent != null)
                {
                    return(parent);
                }
            }

            return(null);
        }
Esempio n. 12
0
        // Token: 0x060058EF RID: 22767 RVA: 0x00189980 File Offset: 0x00187B80
        private static DependencyObject FindParent(DependencyObject o)
        {
            Visual         visual         = o as Visual;
            ContentElement contentElement = (visual == null) ? (o as ContentElement) : null;

            if (contentElement != null)
            {
                o = ContentOperations.GetParent(contentElement);
                if (o != null)
                {
                    return(o);
                }
                FrameworkContentElement frameworkContentElement = contentElement as FrameworkContentElement;
                if (frameworkContentElement != null)
                {
                    return(frameworkContentElement.Parent);
                }
            }
            else if (visual != null)
            {
                return(VisualTreeHelper.GetParent(visual));
            }
            return(null);
        }
 public static IEnumerable <DependencyObject> GetParents(this DependencyObject child)
 {
     while (child != null)
     {
         var parent = LogicalTreeHelper.GetParent(child);
         if (parent == null)
         {
             if (child is FrameworkElement)
             {
                 parent = VisualTreeHelper.GetParent(child);
             }
             if (parent == null && child is ContentElement)
             {
                 parent = ContentOperations.GetParent((ContentElement)child);
             }
             if (parent == null)
             {
                 parent = InheritanceContextProp.GetValue(child, null) as DependencyObject;
             }
         }
         child = parent;
         yield return(parent);
     }
 }
Esempio n. 14
0
        public static DependencyObject LogicalParent(this DependencyObject obj, bool includeVisual = true)
        {
            DependencyObject p;

            if (obj is ContentElement)
            {
                p = ContentOperations.GetParent((ContentElement)obj);
                if (p != null)
                {
                    return(p);
                }
            }
            p = LogicalTreeHelper.GetParent(obj);
            if (p != null)
            {
                return(p);
            }
            p = ItemsControl.ItemsControlFromItemContainer(obj);
            if (p != null)
            {
                return(p);
            }
            return(VisualParent(obj, false));
        }
Esempio n. 15
0
        /// <summary>
        /// Returns the visual parent of <paramref name="element"/>.
        /// This also works for <see cref="ContentElement"/> and <see cref="FrameworkContentElement"/>.
        /// </summary>
        public static DependencyObject GetVisualParent(DependencyObject element)
        {
            if (element == null)
            {
                return(null);
            }

            var contentElement = element as ContentElement;

            if (contentElement != null)
            {
                var parent = ContentOperations.GetParent(contentElement);

                if (parent != null)
                {
                    return(parent);
                }

                var frameworkContentElement = contentElement as FrameworkContentElement;
                return(frameworkContentElement?.Parent);
            }

            return(VisualTreeHelper.GetParent(element));
        }
Esempio n. 16
0
        private bool IsDescendant(DependencyObject reference, DependencyObject node)
        {
            DependencyObject o = node;

            while (o != null)
            {
                if (o == reference)
                {
                    return(true);
                }
                Popup popup = o as Popup;
                if (popup != null)
                {
                    o = popup.Parent;
                    if (o == null)
                    {
                        o = popup.PlacementTarget;
                    }
                }
                else
                {
                    //handle content elements separately
                    ContentElement contentElement = o as ContentElement;
                    if (contentElement != null)
                    {
                        DependencyObject parent = ContentOperations.GetParent(contentElement);
                        if (parent != null)
                        {
                            o = parent;
                        }
                        FrameworkContentElement fce = contentElement as FrameworkContentElement;
                        if (fce != null)
                        {
                            o = fce.Parent;
                        }
                        else
                        {
                            o = null;
                        }
                    }
                    else
                    {
                        //also try searching for parent in framework elements (such as DockPanel, etc)
                        FrameworkElement frameworkElement = o as FrameworkElement;
                        if (frameworkElement != null)
                        {
                            DependencyObject parent = frameworkElement.Parent;
                            if (parent != null)
                            {
                                o = parent;
                                continue;
                            }
                        }

                        //if it's not a ContentElement/FrameworkElement, rely on VisualTreeHelper
                        o = VisualTreeHelper.GetParent(o);
                    }
                }
            }
            return(false);
        }
        // Token: 0x060064A7 RID: 25767 RVA: 0x001C3BF8 File Offset: 0x001C1DF8
        private FrameworkObject GetRawPreferVisualParent()
        {
            if (this._do == null)
            {
                return(new FrameworkObject(null));
            }
            DependencyObject dependencyObject;

            if (this.IsFE)
            {
                dependencyObject = VisualTreeHelper.GetParent(this._fe);
            }
            else if (this.IsFCE)
            {
                dependencyObject = null;
            }
            else if (this._do != null)
            {
                Visual visual = this._do as Visual;
                dependencyObject = ((visual != null) ? VisualTreeHelper.GetParent(visual) : null);
            }
            else
            {
                dependencyObject = null;
            }
            if (dependencyObject != null)
            {
                return(new FrameworkObject(dependencyObject));
            }
            DependencyObject dependencyObject2;

            if (this.IsFE)
            {
                dependencyObject2 = this._fe.Parent;
            }
            else if (this.IsFCE)
            {
                dependencyObject2 = this._fce.Parent;
            }
            else if (this._do != null)
            {
                ContentElement contentElement = this._do as ContentElement;
                dependencyObject2 = ((contentElement != null) ? ContentOperations.GetParent(contentElement) : null);
            }
            else
            {
                dependencyObject2 = null;
            }
            if (dependencyObject2 != null)
            {
                return(new FrameworkObject(dependencyObject2));
            }
            UIElement        uielement;
            DependencyObject dependencyObject3;
            ContentElement   contentElement2;

            if ((uielement = (this._do as UIElement)) != null)
            {
                dependencyObject3 = uielement.GetUIParentCore();
            }
            else if ((contentElement2 = (this._do as ContentElement)) != null)
            {
                dependencyObject3 = contentElement2.GetUIParentCore();
            }
            else
            {
                dependencyObject3 = null;
            }
            if (dependencyObject3 != null)
            {
                return(new FrameworkObject(dependencyObject3));
            }
            return(new FrameworkObject(this._do.InheritanceContext));
        }
Esempio n. 18
0
        // helper used by GetPreferVisualParent - doesn't check InheritanceBehavior
        private FrameworkObject GetRawPreferVisualParent()
        {
            // the null object has no parent
            if (_do == null)
            {
                return(new FrameworkObject(null));
            }

            // get visual parent
            DependencyObject visualParent;

            if (IsFE)
            {
                visualParent = VisualTreeHelper.GetParent(_fe);
            }
            else if (IsFCE)
            {
                visualParent = null;
            }
            else if (_do != null)
            {
                Visual visual = _do as Visual;
                visualParent = (visual != null) ? VisualTreeHelper.GetParent(visual) : null;
            }
            else
            {
                visualParent = null;
            }

            if (visualParent != null)
            {
                return(new FrameworkObject(visualParent));
            }

            // if no visual parent, get logical parent
            DependencyObject logicalParent;

            if (IsFE)
            {
                logicalParent = _fe.Parent;
            }
            else if (IsFCE)
            {
                logicalParent = _fce.Parent;
            }
            else if (_do != null)
            {
                ContentElement ce = _do as ContentElement;
                logicalParent = (ce != null) ? ContentOperations.GetParent(ce) : null;
            }
            else
            {
                logicalParent = null;
            }

            if (logicalParent != null)
            {
                return(new FrameworkObject(logicalParent));
            }

            // if no logical or visual parent, get "uiCore" parent
            UIElement        uiElement;
            ContentElement   contentElement;
            DependencyObject uiCoreParent;

            if ((uiElement = _do as UIElement) != null)
            {
                uiCoreParent = uiElement.GetUIParentCore();
            }
            else if ((contentElement = _do as ContentElement) != null)
            {
                uiCoreParent = contentElement.GetUIParentCore();
            }
            else
            {
                uiCoreParent = null;
            }

            if (uiCoreParent != null)
            {
                return(new FrameworkObject(uiCoreParent));
            }

            // if all else fails, use InheritanceContext
            return(new FrameworkObject(_do.InheritanceContext));
        }