Example #1
0
        public static IEnumerable <DependencyObject> GetVisualSiblingsAndSelf(this DependencyObject element)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element");
            }
            DependencyObject parent = VisualTreeHelper.GetParent(element);

            if (parent != null)
            {
                return(VisualTreeExtensions.GetVisualChildren(parent));
            }
            return(Enumerable.Empty <DependencyObject>());
        }
Example #2
0
        private static IEnumerable <DependencyObject> GetVisualDescendantsAndSelfIterator(DependencyObject element)
        {
            Queue <DependencyObject> remaining = new Queue <DependencyObject>();

            remaining.Enqueue(element);
            while (remaining.Count > 0)
            {
                DependencyObject obj = remaining.Dequeue();
                yield return(obj);

                foreach (DependencyObject dependencyObject in VisualTreeExtensions.GetVisualChildren(obj))
                {
                    remaining.Enqueue(dependencyObject);
                }
            }
        }
Example #3
0
        public static Panel GetItemsHost(this ItemsControl control)
        {
            if (control == null)
            {
                throw new ArgumentNullException("control");
            }
            DependencyObject reference = control.ItemContainerGenerator.ContainerFromIndex(0);

            if (reference != null)
            {
                return(VisualTreeHelper.GetParent(reference) as Panel);
            }
            FrameworkElement parent = Enumerable.FirstOrDefault <DependencyObject>(VisualTreeExtensions.GetVisualChildren((DependencyObject)control)) as FrameworkElement;

            if (parent != null)
            {
                ItemsPresenter itemsPresenter = Enumerable.FirstOrDefault <ItemsPresenter>(Enumerable.OfType <ItemsPresenter>((IEnumerable)VisualTreeExtensions.GetLogicalDescendents(parent)));
                if (itemsPresenter != null && VisualTreeHelper.GetChildrenCount((DependencyObject)itemsPresenter) > 0)
                {
                    return(VisualTreeHelper.GetChild((DependencyObject)itemsPresenter, 0) as Panel);
                }
            }
            return((Panel)null);
        }
Example #4
0
        internal static IEnumerable <FrameworkElement> GetLogicalChildren(this FrameworkElement parent)
        {
            Popup popup = parent as Popup;

            if (popup != null)
            {
                FrameworkElement popupChild = popup.Child as FrameworkElement;
                if (popupChild != null)
                {
                    yield return(popupChild);
                }
            }
            ItemsControl itemsControl = parent as ItemsControl;

            if (itemsControl != null)
            {
                foreach (FrameworkElement frameworkElement in Enumerable.OfType <FrameworkElement>((IEnumerable)Enumerable.Select <int, DependencyObject>(Enumerable.Range(0, itemsControl.Items.Count), (Func <int, DependencyObject>)(index => itemsControl.ItemContainerGenerator.ContainerFromIndex(index)))))
                {
                    yield return(frameworkElement);
                }
            }
            Queue <FrameworkElement> queue = new Queue <FrameworkElement>(Enumerable.OfType <FrameworkElement>((IEnumerable)VisualTreeExtensions.GetVisualChildren((DependencyObject)parent)));

            while (queue.Count > 0)
            {
                FrameworkElement element = queue.Dequeue();
                if (element.Parent == parent || element is UserControl)
                {
                    yield return(element);
                }
                else
                {
                    foreach (FrameworkElement frameworkElement in Enumerable.OfType <FrameworkElement>((IEnumerable)VisualTreeExtensions.GetVisualChildren((DependencyObject)element)))
                    {
                        queue.Enqueue(frameworkElement);
                    }
                }
            }
        }