public static T GetFirstParentOf <T> (this DependencyObject start, eTraversalTree tree = eTraversalTree.Visual) where T : DependencyObject { var parentSelector = ParentSelectorForTree(tree); var childSelector = ChildSelectorForTree(tree); return(TreeTraversal <DependencyObject> .GetFirstParentOfType <T>(start, getParentMethodOverride : _ => parentSelector(_), getChildrenMethodOverride : _ => childSelector(_))); }
public static ChildrenSelector ChildSelectorForTree(eTraversalTree targetTree) { switch (targetTree) { case eTraversalTree.Visual: return(GetVisualChildren); case eTraversalTree.Logical: return(GetLogicalChildren); default: return(GetVisualAndLogicalChildren); } }
public static ParentSelector ParentSelectorForTree(eTraversalTree targetTree) { switch (targetTree) { case eTraversalTree.Visual: return(GetVisualParent); case eTraversalTree.Logical: return(GetLogicalParent); default: return(_ => GetVisualParent(_) ?? GetLogicalParent(_)); } }