private static void RaiseUsingCaptures(RaisePointerEventArgs raise, UIElement originalSource, PointerRoutedEventArgs routedArgs) { if (PointerCapture.TryGet(routedArgs.Pointer, out var capture)) { var targets = capture.Targets.ToList(); if (capture.IsImplicitOnly) { raise(originalSource, routedArgs, BubblingContext.Bubble); foreach (var target in targets) { routedArgs.Handled = false; raise(target.Element, routedArgs, BubblingContext.NoBubbling); } } else { var explicitTarget = targets.Find(c => c.Kind == PointerCaptureKind.Explicit) !; raise(explicitTarget.Element, routedArgs, BubblingContext.Bubble); foreach (var target in targets) { if (target == explicitTarget) { continue; } routedArgs.Handled = false; raise(target.Element, routedArgs, BubblingContext.NoBubbling); } } } else { raise(originalSource, routedArgs, BubblingContext.Bubble); } }
private static void Raise(RaisePointerEventArgs raise, VisualTreeHelper.Branch branch, PointerRoutedEventArgs routedArgs) => raise(branch.Leaf, routedArgs, BubblingContext.BubbleUpTo(branch.Root));
private static void Raise(RaisePointerEventArgs raise, UIElement originalSource, PointerRoutedEventArgs routedArgs) => raise(originalSource, routedArgs, BubblingContext.Bubble);