Beispiel #1
0
        public static DependencyObject GetVisualOrLogicalParent(this DependencyObject dep)
        {
            if (dep == null)
            {
                return(null);
            }

            var ce = dep 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);
            }

            if (dep is Visual || dep is Visual3D)
            {
                return(VisualTreeHelper.GetParent(dep));
            }

            // If we're in Logical Land then we must walk
            // up the logical tree until we find a
            // Visual/Visual3D to get us back to Visual Land.
            return(LogicalTreeHelper.GetParent(dep));
        }
        /// <summary>
        ///     Returns the first <see cref="UIElement" /> in the ancestral chain including
        ///     the element itself.
        /// </summary>
        /// <param name="element">
        ///     The <see cref="DependencyObject" /> to get the containing UI element for.
        /// </param>
        /// <returns>
        ///     The first <see cref="UIElement" /> that contains the <paramref name="element" />.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        ///     If <paramref name="element" /> is null.
        /// </exception>
        public static UIElement GetContainingElement(this DependencyObject element)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element");
            }

            var uiElement = element as UIElement;

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

            var contentElement = element as ContentElement;

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

            return(null);
        }
Beispiel #3
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)
        {
            switch (child)
            {
            case null:
                return(null);

            //handle content elements separately
            case ContentElement contentElement:
            {
                var parent = ContentOperations.GetParent(contentElement);
                if (parent != null)
                {
                    return(parent);
                }

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

            //also try searching for parent in framework elements (such as DockPanel, etc)
            case FrameworkElement frameworkElement:
            {
                var parent = frameworkElement.Parent;
                if (parent != null)
                {
                    return(parent);
                }
                break;
            }
            }

            //if it's not a ContentElement/FrameworkElement, rely on VisualTreeHelper
            return(VisualTreeHelper.GetParent(child));
        }
Beispiel #4
0
        public static DependencyObject FindObjectParent(DependencyObject source, Predicate <DependencyObject> isTypeMatching)
        {
            DependencyObject testOb = source;

            while (testOb != null && !isTypeMatching(testOb))
            {
                var nextParentOb = LogicalTreeHelper.GetParent(testOb);
                if (nextParentOb == null)
                {
                    if (testOb is FrameworkElement)
                    {
                        nextParentOb = VisualTreeHelper.GetParent(testOb);
                    }

                    if (nextParentOb == null && testOb is ContentElement)
                    {
                        nextParentOb = ContentOperations.GetParent((ContentElement)testOb);
                    }

                    if (nextParentOb == null)
                    {
                        nextParentOb = InheritanceContextProp.GetValue(testOb, null) as DependencyObject;
                    }
                }

                testOb = nextParentOb;
            }

            return(testOb);
        }
        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));
        }
Beispiel #6
0
        public static DependencyObject GetParent(this DependencyObject child)
        {
            if (child == null)
            {
                return((DependencyObject)null);
            }
            ContentElement reference = child as ContentElement;

            if (reference == null)
            {
                return(VisualTreeHelper.GetParent(child));
            }
            DependencyObject parent = ContentOperations.GetParent(reference);

            if (parent != null)
            {
                return(parent);
            }
            FrameworkContentElement frameworkContentElement = reference as FrameworkContentElement;

            if (frameworkContentElement == null)
            {
                return((DependencyObject)null);
            }
            else
            {
                return(frameworkContentElement.Parent);
            }
        }
Beispiel #7
0
        internal static DependencyObject FindParent(DependencyObject o)
        {
            DependencyObject dependencyObject = o as Visual;

            if (dependencyObject == null)
            {
                dependencyObject = (o as Visual3D);
            }
            ContentElement contentElement = (dependencyObject == 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 (dependencyObject != null)
            {
                return(VisualTreeHelper.GetParent(dependencyObject));
            }
            return(null);
        }
 /// <summary>
 /// Uses reflection and internal InheritanceContext, potentially fragile
 /// http://stackoverflow.com/a/20988314/1069200
 /// </summary>
 /// <param name="child"></param>
 /// <returns></returns>
 public static IEnumerable <DependencyObject> AllAncestors(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;
             }
         }
         if (parent == null)
         {
             yield break;
         }
         child = parent;
         yield return(parent);
     }
 }
        public static DependencyObject GetCoreParent(DependencyObject element, DeferredElementTreeState treeState)
        {
            DependencyObject parent = null;

            if (treeState != null && treeState._oldCoreParents.ContainsKey(element))
            {
                parent = treeState._oldCoreParents[element];
            }
            else
            {
                Visual v = element as Visual;
                if (v != null)
                {
                    parent = VisualTreeHelper.GetParent(v);
                }
                else
                {
                    ContentElement ce = element as ContentElement;
                    if (ce != null)
                    {
                        parent = ContentOperations.GetParent(ce);
                    }
                    else
                    {
                        Visual3D v3D = element as Visual3D;
                        if (v3D != null)
                        {
                            parent = VisualTreeHelper.GetParent(v3D);
                        }
                    }
                }
            }

            return(parent);
        }
		/// <summary>
		/// Gets the parent. Which tree the parent is retrieved from depends on the parameters.
		/// </summary>
		/// <param name="child">The child to get parent for.</param>
		/// <param name="searchCompleteVisualTree">If true the parent in the visual tree is returned, if false the parent may be retrieved from another tree depending on the child type.</param>
		/// <returns>The parent element, and depending on the parameters its retrieved from either visual tree, logical tree or a tree not strictly speaking either the logical tree or the visual tree.</returns>
		public static DependencyObject GetParentObject(this DependencyObject child, bool searchCompleteVisualTree)
		{
			if (child == null) return null;

			if (!searchCompleteVisualTree) {
				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;
				}
	
				var frameworkElement = child as FrameworkElement;
				if (frameworkElement != null)
				{
					DependencyObject parent = frameworkElement.Parent;
					if (parent != null) return parent;
				}
			}

			return VisualTreeHelper.GetParent(child);
		}
        private T FindVisualParent <T>(DependencyObject obj, DependencyProperty property, object value) where T : DependencyObject
        {
            while (obj != null)
            {
                ContentElement contentElement = obj as ContentElement;
                if (contentElement != null)
                {
                    // if our object is a content element, find its parent via ContentOperations.GetParent(...)
                    obj = ContentOperations.GetParent(contentElement);

                    // if that fails, try FrameworkContentElement.Parent instead.
                    FrameworkContentElement frameworkContentElement = contentElement as FrameworkContentElement;
                    if (frameworkContentElement != null)
                    {
                        obj = frameworkContentElement.Parent;
                    }
                    else
                    {
                        obj = null;
                    }
                }
                else
                {
                    // if our object is not a content element, find its parent via VisualTreeHelper.GetParent(...)
                    obj = VisualTreeHelper.GetParent(obj);
                }

                if (obj != null && obj is T && (property == null || value == null || value.Equals(obj.GetValue(property))))
                {
                    return((T)obj);
                }
            }

            return(null);
        }
        public static DependencyObject GetParentObject(this DependencyObject context)
        {
            if (context == null)
            {
                return(null);
            }

            ContentElement contextAsContentElement = context as ContentElement;

            if (contextAsContentElement != null)
            {
                DependencyObject parentOfContentElement = ContentOperations.GetParent(contextAsContentElement);
                if (parentOfContentElement != null)
                {
                    return(parentOfContentElement);
                }
            }

            FrameworkElement contextAsFrameworkElement = context as FrameworkElement;

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

            return(VisualTreeHelper.GetParent(context));
        }
        public void CreateDraftEvent()
        {
            this.CreateCalendar();

            var operations = new ContentOperations <Events>();

            var eventItem = new Events();

            eventTitle           = TestContentPrefix + Guid.NewGuid().ToString();
            eventItem.Title      = eventTitle;
            eventItem.Content    = EventContent;
            eventItem.EventStart = DateTime.UtcNow.ToString("o");
            eventItem.EventEnd   = DateTime.UtcNow.AddHours(2).ToString("o");
            eventItem.ParentId   = calendarId.ToString();

            var response = operations.CreateDraft(eventItem);

            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);

            var results = JsonConvert.DeserializeObject <dynamic>(response.Content);

            Assert.AreEqual(eventItem.Title, results.Title.ToString());
            Assert.AreEqual(eventItem.Content, results.Content.ToString());

            eventId = results.Id;
            Assert.IsNotNull(eventId);
        }
Beispiel #14
0
        public static DependencyObject GetParentObject(this 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);
            }

            case FrameworkElement frameworkElement:
            {
                DependencyObject parent = frameworkElement.Parent;
                if (parent != null)
                {
                    return(parent);
                }
                break;
            }
            }

            return(VisualTreeHelper.GetParent(child));
        }
        public void CreateBlogPost()
        {
            this.CreateBlog();

            Posts post = new Posts();

            postTitle     = TestContentPrefix + Guid.NewGuid().ToString();
            post.Title    = blogsTitle;
            post.ParentId = blogId.ToString();
            post.Content  = PostContent;

            var operations = new ContentOperations <Posts>();

            operations.CreateDraft(post);

            var response = operations.CreateDraft(post);

            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);

            var results = JsonConvert.DeserializeObject <dynamic>(response.Content);

            Assert.AreEqual(post.Title, results.Title.ToString());

            postId = results.Id;
            Assert.IsNotNull(blogId);

            response = operations.Publish(post);
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
        }
Beispiel #16
0
        private static DependencyObject FindParent(DependencyObject o)
        {
            Visual         v  = o as Visual;
            ContentElement ce = (v == null) ? o as ContentElement : null;

            if (ce != null)
            {
                o = ContentOperations.GetParent(ce);
                if (o != null)
                {
                    return(o);
                }
                else
                {
                    FrameworkContentElement fce = ce as FrameworkContentElement;
                    if (fce != null)
                    {
                        return(fce.Parent);
                    }
                }
            }
            else if (v != null)
            {
                return(VisualTreeHelper.GetParent(v));
            }

            return(null);
        }
Beispiel #17
0
        public static DependencyObject GetParentObject(this DependencyObject child)
        {
            if (child == null)
            {
                return(null);
            }

            var contentElement = child as ContentElement;

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

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

            var frameworkElement = child as FrameworkElement;

            if (frameworkElement != null)
            {
                var parent = frameworkElement.Parent;
                if (parent != null)
                {
                    return(parent);
                }
            }
            return(VisualTreeHelper.GetParent(child));
        }
        public static DependencyObject GetParent(this DependencyObject dependencyObject)
        {
            if (dependencyObject == null)
            {
                throw new ArgumentNullException(nameof(dependencyObject));
            }

            var fe = dependencyObject as FrameworkElement;

            if (fe?.Parent != null)
            {
                return(fe.Parent);
            }

            var ce = dependencyObject as ContentElement;

            if (ce == null)
            {
                return(VisualTreeHelper.GetParent(dependencyObject));
            }

            var parent = ContentOperations.GetParent(ce);

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

            var fce = ce as FrameworkContentElement;

            return(fce?.Parent);
        }
        internal static FrameworkObject GetContainingFrameworkElement(DependencyObject current)
        {
            var fo = new FrameworkObject(current);

            while (!fo.IsValid && fo.DependencyObject != null)
            {
                // The current object is neither a FrameworkElement nor a
                // FrameworkContentElement.  We will now walk the "core"
                // tree looking for one.
                Visual         visual;
                Visual3D       visual3D;
                ContentElement ce;

                if ((visual = fo.DependencyObject as Visual) != null)
                {
                    fo.Reset(VisualTreeHelper.GetParent(visual));
                }
                else if ((ce = fo.DependencyObject as ContentElement) != null)
                {
                    fo.Reset(ContentOperations.GetParent(ce));
                }
                else if ((visual3D = fo.DependencyObject as Visual3D) != null)
                {
                    fo.Reset(VisualTreeHelper.GetParent(visual3D));
                }
                else
                {
                    // The parent could be an application.
                    fo.Reset(null);
                }
            }

            return(fo);
        }
Beispiel #20
0
        public static DependencyObject GetParentObject(this DependencyObject element)
        {
            if (element == null)
            {
                return(null);
            }

            if (element is ContentElement)
            {
                var parent = ContentOperations.GetParent((ContentElement)element);
                if (parent != null)
                {
                    return(parent);
                }

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

            if (element is FrameworkElement)
            {
                var parent = ((FrameworkElement)element).Parent;
                if (parent != null)
                {
                    return(parent);
                }
            }

            return(VisualTreeHelper.GetParent(element));
        }
Beispiel #21
0
        internal static DependencyObject FindContentElementParent(ContentElement ce)
        {
            DependencyObject dependencyObject  = null;
            DependencyObject dependencyObject2 = ce;

            while (dependencyObject2 != null)
            {
                dependencyObject = (dependencyObject2 as Visual);
                if (dependencyObject != null)
                {
                    break;
                }
                dependencyObject = (dependencyObject2 as Visual3D);
                if (dependencyObject != null)
                {
                    break;
                }
                ce = (dependencyObject2 as ContentElement);
                if (ce == null)
                {
                    break;
                }
                dependencyObject2 = ContentOperations.GetParent(ce);
                if (dependencyObject2 == null)
                {
                    FrameworkContentElement frameworkContentElement = ce as FrameworkContentElement;
                    if (frameworkContentElement != null)
                    {
                        dependencyObject2 = frameworkContentElement.Parent;
                    }
                }
            }
            return(dependencyObject);
        }
Beispiel #22
0
        public static DependencyObject GetParentObject(this DependencyObject child)
        {
            if (child == null)
            {
                return(null);
            }

            if (child is ContentElement contentElement)
            {
                var parent = ContentOperations.GetParent(contentElement);
                if (parent != null)
                {
                    return(parent);
                }

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

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

            return(VisualTreeHelper.GetParent(child));
        }
        // Token: 0x0600648E RID: 25742 RVA: 0x001C36C8 File Offset: 0x001C18C8
        internal static FrameworkObject GetContainingFrameworkElement(DependencyObject current)
        {
            FrameworkObject result = new FrameworkObject(current);

            while (!result.IsValid && result.DO != null)
            {
                Visual         reference;
                ContentElement reference2;
                Visual3D       reference3;
                if ((reference = (result.DO as Visual)) != null)
                {
                    result.Reset(VisualTreeHelper.GetParent(reference));
                }
                else if ((reference2 = (result.DO as ContentElement)) != null)
                {
                    result.Reset(ContentOperations.GetParent(reference2));
                }
                else if ((reference3 = (result.DO as Visual3D)) != null)
                {
                    result.Reset(VisualTreeHelper.GetParent(reference3));
                }
                else
                {
                    result.Reset(null);
                }
            }
            return(result);
        }
Beispiel #24
0
        public static DependencyObject GetParentObject(DependencyObject child)
        {
            if (child == null)
            {
                return(null);
            }

            ContentElement contentElement = child as ContentElement;

            DependencyObject parent = null;

            if (contentElement != null)
            {
                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
            parent = VisualTreeHelper.GetParent(child);

            if (parent == null && child is FrameworkElement)
            {
                return((child as FrameworkElement).Parent);
            }

            return(parent);
        }
Beispiel #25
0
        internal static DependencyObject FindParent(DependencyObject o)
        {
            var visual         = (DependencyObject)(o as Visual) ?? o as Visual3D;
            var contentElement = visual == null ? o as ContentElement : null;

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

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

                var frameworkContentElement = contentElement as FrameworkContentElement;
                if (frameworkContentElement != null)
                {
                    return(frameworkContentElement.Parent);
                }

                return(null);
            }

            if (visual != null)
            {
                return(VisualTreeHelper.GetParent(visual));
            }

            return(null);
        }
Beispiel #26
0
        private static DependencyObject GetParent(DependencyObject o)
        {
            if (o == null)
            {
                return(null);
            }
            if (o is ContentElement)
            {
                DependencyObject parent = ContentOperations.GetParent((ContentElement)o);
                if (parent != null)
                {
                    return(parent);
                }

                if (o is FrameworkContentElement)
                {
                    return(((FrameworkContentElement)o).Parent);
                }
            }
            else if (o is FrameworkElement)
            {
                return(((FrameworkElement)o).Parent);
            }
            return(VisualTreeHelper.GetParent(o));
        }
        public static DependencyObject GetParent(DependencyObject obj)
        {
            if (obj == null)
            {
                return(null);
            }

            var ce = obj as ContentElement;

            if (ce == null)
            {
                return(VisualTreeHelper.GetParent(obj));
            }

            var parent = ContentOperations.GetParent(ce);

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

            var fce = ce as FrameworkContentElement;

            return(fce != null ? fce.Parent : null);
        }
Beispiel #28
0
        private static T TryFindParent <T>(DependencyObject child) where T : DependencyObject
        {
            DependencyObject parent;

            if (child == null)
            {
                return(null);
            }
            if (child is ContentElement contentElement)
            {
                parent = ContentOperations.GetParent(contentElement);
                if (parent == null && child is FrameworkContentElement fce)
                {
                    parent = fce.Parent;
                }
            }
            else
            {
                parent = VisualTreeHelper.GetParent(child);
            }

            if (parent is T result)
            {
                return(result);
            }
            else
            {
                return(TryFindParent <T>(parent));
            }
        }
Beispiel #29
0
        /// <summary>
        /// Finds the direct visual parent of an element.
        /// </summary>
        public static DependencyObject GetVisualParent(this DependencyObject dependencyObject)
        {
            DependencyObject parentObject = null;

            if (dependencyObject != null)
            {
                ContentElement contentElement = dependencyObject as ContentElement;
                if (contentElement != null)
                {
                    DependencyObject parent = ContentOperations.GetParent(contentElement);
                    if (parent != null)
                    {
                        parentObject = parent;
                    }
                    else
                    {
                        FrameworkContentElement frameworkContentElement = contentElement as FrameworkContentElement;
                        parentObject =
                            frameworkContentElement != null ? frameworkContentElement.Parent : null;
                    }
                }
                else
                {
                    parentObject = VisualTreeHelper.GetParent(dependencyObject);
                }
            }
            return(parentObject);
        }
Beispiel #30
0
        internal static DependencyObject FindParent(DependencyObject o)
        {
            // see if o is a Visual or a Visual3D
            DependencyObject v = o as Visual;

            if (v == null)
            {
                v = o as Visual3D;
            }

            ContentElement ce = (v == null) ? o as ContentElement : null;

            if (ce != null)
            {
                o = ContentOperations.GetParent(ce);
                if (o != null)
                {
                    return(o);
                }
                else
                {
                    FrameworkContentElement fce = ce as FrameworkContentElement;
                    if (fce != null)
                    {
                        return(fce.Parent);
                    }
                }
            }
            else if (v != null)
            {
                return(VisualTreeHelper.GetParent(v));
            }

            return(null);
        }