| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /*************************************************************************************
- Extended WPF Toolkit
- Copyright (C) 2007-2013 Xceed Software Inc.
- This program is provided to you under the terms of the Microsoft Public
- License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
- For more features, controls, and fast professional support,
- pick up the Plus Edition at http://xceed.com/wpf_toolkit
- Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
- ***********************************************************************************/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Media;
- using System.Windows.Media.Media3D;
- using System.Runtime.InteropServices;
- namespace Xceed.Wpf.AvalonDock.Controls
- {
- public static class Extentions
- {
- public static IEnumerable<T> FindVisualChildren<T>(this DependencyObject depObj) where T : DependencyObject
- {
- if (depObj != null)
- {
- for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
- {
- DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
- if (child != null && child is T)
- {
- yield return (T)child;
- }
- foreach (T childOfChild in FindVisualChildren<T>(child))
- {
- yield return childOfChild;
- }
- }
- }
- }
- public static IEnumerable<T> FindLogicalChildren<T>(this DependencyObject depObj) where T : DependencyObject
- {
- if (depObj != null)
- {
- foreach (DependencyObject child in LogicalTreeHelper.GetChildren(depObj).OfType<DependencyObject>())
- {
- if (child != null && child is T)
- {
- yield return (T)child;
- }
- foreach (T childOfChild in FindLogicalChildren<T>(child))
- {
- yield return childOfChild;
- }
- }
- }
- }
- public static DependencyObject FindVisualTreeRoot(this DependencyObject initial)
- {
- DependencyObject current = initial;
- DependencyObject result = initial;
- while (current != null)
- {
- result = current;
- if (current is Visual || current is Visual3D)
- {
- current = VisualTreeHelper.GetParent(current);
- }
- else
- {
- // 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.
- current = LogicalTreeHelper.GetParent(current);
- }
- }
- return result;
- }
- public static T FindVisualAncestor<T>(this DependencyObject dependencyObject) where T : class
- {
- DependencyObject target = dependencyObject;
- do
- {
- target = VisualTreeHelper.GetParent(target);
- }
- while (target != null && !(target is T));
- return target as T;
- }
- public static T FindLogicalAncestor<T>(this DependencyObject dependencyObject) where T : class
- {
- DependencyObject target = dependencyObject;
- do
- {
- var current = target;
- target = LogicalTreeHelper.GetParent(target);
- if (target == null)
- target = VisualTreeHelper.GetParent(current);
- }
- while (target != null && !(target is T));
- return target as T;
- }
- }
- }
|