Example #1
0
 public static void EnumerateTree(Visual reference, EnumerateTreeFilterCallback filterCallback,
                                  EnumerateTreeResultCallback enumeratorCallback, object misc)
 {
     if (reference == null)
     {
         throw new ArgumentNullException("reference");
     }
     DoEnumerateTree(reference, filterCallback, enumeratorCallback, misc);
 }
Example #2
0
        static bool DoEnumerateTree(object reference, EnumerateTreeFilterCallback filterCallback,
                                    EnumerateTreeResultCallback enumeratorCallback, object misc)
        {
            for (var i = 0; i < CommonTreeHelper.GetChildrenCount(reference); ++i)
            {
                var child = CommonTreeHelper.GetChild(reference, i);

                var filterResult = HitTestFilterBehavior.Continue;
                if (filterCallback != null)
                {
                    filterResult = filterCallback(child, misc);
                }

                var enumerateSelf     = true;
                var enumerateChildren = true;

                switch (filterResult)
                {
                case HitTestFilterBehavior.Continue:
                    break;

                case HitTestFilterBehavior.ContinueSkipChildren:
                    enumerateChildren = false;
                    break;

                case HitTestFilterBehavior.ContinueSkipSelf:
                    enumerateSelf = false;
                    break;

                case HitTestFilterBehavior.ContinueSkipSelfAndChildren:
                    enumerateChildren = false;
                    enumerateSelf     = false;
                    break;

                default:
                    return(false);
                }

                if
                (
                    (enumerateSelf && enumeratorCallback != null &&
                     enumeratorCallback(child, misc) == HitTestResultBehavior.Stop) ||
                    (enumerateChildren && !DoEnumerateTree(child, filterCallback, enumeratorCallback, misc))
                )
                {
                    return(false);
                }
            }

            return(true);
        }
Example #3
0
        private static bool DoEnumerateTree(DependencyObject reference, EnumerateTreeFilterCallback filterCallback, EnumerateTreeResultCallback enumeratorCallback, object misc)
        {
            for (var i = 0; i < VisualTreeHelper.GetChildrenCount(reference); ++i)
            {
                var child = VisualTreeHelper.GetChild(reference, i);

                var filterResult = filterCallback?.Invoke(child, misc) ?? HitTestFilterBehavior.Continue;

                var enumerateSelf     = true;
                var enumerateChildren = true;

                switch (filterResult)
                {
                case HitTestFilterBehavior.Continue:
                    break;

                case HitTestFilterBehavior.ContinueSkipChildren:
                    enumerateChildren = false;
                    break;

                case HitTestFilterBehavior.ContinueSkipSelf:
                    enumerateSelf = false;
                    break;

                case HitTestFilterBehavior.ContinueSkipSelfAndChildren:
                    enumerateChildren = false;
                    enumerateSelf     = false;
                    break;

                default:
                    return(false);
                }

                if ((enumerateSelf && enumeratorCallback?.Invoke(child, misc) == HitTestResultBehavior.Stop) ||
                    (enumerateChildren && DoEnumerateTree(child, filterCallback, enumeratorCallback, misc) == false))
                {
                    return(false);
                }
            }

            return(true);
        }
Example #4
0
 public static void EnumerateTree(this Visual visual, EnumerateTreeFilterCallback filterCallback, EnumerateTreeResultCallback enumeratorCallback, object misc)
 {
     if (visual == null)
     {
         throw new ArgumentNullException(nameof(visual));
     }
     DoEnumerateTree(visual, filterCallback, enumeratorCallback, misc);
 }
 public static void EnumerateTree(this Visual @this, EnumerateTreeFilterCallback filterCallback, EnumerateTreeResultCallback enumeratorCallback, object misc)
 {
     if (@this == null)
     {
         throw new ArgumentNullException("this");
     }
     DoEnumerateTree(@this, filterCallback, enumeratorCallback, misc);
 }