示例#1
0
        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(_)));
        }
示例#2
0
        public static ChildrenSelector ChildSelectorForTree(eTraversalTree targetTree)
        {
            switch (targetTree)
            {
            case eTraversalTree.Visual:  return(GetVisualChildren);

            case eTraversalTree.Logical: return(GetLogicalChildren);

            default:                     return(GetVisualAndLogicalChildren);
            }
        }
示例#3
0
        public static ParentSelector ParentSelectorForTree(eTraversalTree targetTree)
        {
            switch (targetTree)
            {
            case eTraversalTree.Visual: return(GetVisualParent);

            case eTraversalTree.Logical: return(GetLogicalParent);

            default: return(_ => GetVisualParent(_) ?? GetLogicalParent(_));
            }
        }