public static DependencyObject HitTestFirst(this Visual reference, HitTestParameters htParams, Predicate <DependencyObject> filter) { Contract.Requires(reference != null); Contract.Requires(htParams != null); Contract.Requires(filter != null); Contract.Ensures(Contract.Result <DependencyObject>() == null || filter(Contract.Result <DependencyObject>())); DependencyObject result = null; VisualTreeHelper.HitTest( reference, null, htResult => { var visual = htResult.VisualHit; if (filter(visual)) { result = visual; return(HitTestResultBehavior.Stop); } else { return(HitTestResultBehavior.Continue); } }, htParams); return(result); }
public static IList <DependencyObject> HitTestAll(this Visual reference, HitTestParameters htParams, Predicate <DependencyObject> filter = null) { Contract.Requires(reference != null); Contract.Requires(htParams != null); Contract.Ensures(Contract.Result <IList <DependencyObject> >() != null); Contract.Ensures(filter == null || Contract.ForAll(Contract.Result <IList <DependencyObject> >(), d => filter(d))); // null filter means filter nothing (we return everything we can) if (filter == null) { filter = _ => true; } var result = new List <DependencyObject>(); VisualTreeHelper.HitTest( reference, null, htResult => { var visual = htResult.VisualHit; if (filter(visual)) { result.Add(visual); } return(HitTestResultBehavior.Continue); }, htParams); return(result); }
public static HitTestResult HitTest(Visual reference, HitTestParameters hitTestParameters, bool ignoreDisabled, HitTestFilterCallback filterCallback) { HitTestResult hitTestResult = (HitTestResult)null; HitTestResultCallback resultCallback = (HitTestResultCallback)(hitItemsResult => { hitTestResult = hitItemsResult; return(HitTestResultBehavior.Stop); }); HitTestFilterCallback filterCallback1 = (HitTestFilterCallback)(hit => { UIElement uiElement = hit as UIElement; if (uiElement != null && (!uiElement.IsVisible || !uiElement.IsHitTestVisible || ignoreDisabled && !uiElement.IsEnabled)) { return(HitTestFilterBehavior.ContinueSkipSelfAndChildren); } HitTestFilterBehavior testFilterBehavior = HitTestFilterBehavior.Continue; if (filterCallback != null) { testFilterBehavior = filterCallback(hit); } return(testFilterBehavior); }); VisualTreeHelper.HitTest(reference, filterCallback1, resultCallback, hitTestParameters); return(hitTestResult); }
public VisualHitTestArgs(Visual sourceAncestor, Visual child, HitTestParameters parameters) { if (sourceAncestor == null) { throw new ArgumentNullException("sourceAncestor"); } if (child == null) { throw new ArgumentNullException("child"); } this._sourceAncestor = sourceAncestor; this._child = child; this._hitTestParameters = parameters; }
public RectangleHitTestResultTreeNode HitTest(HitTestParameters hitTestParameters) { PointHitTestParameters hitTestParameters1 = hitTestParameters as PointHitTestParameters; if (hitTestParameters1 != null) { return(this.HitTestPoint(hitTestParameters1.HitPoint)); } GeometryHitTestParameters hitTestParameters2; if ((hitTestParameters2 = hitTestParameters as GeometryHitTestParameters) != null) { return(this.HitTestGeometry(hitTestParameters2.HitGeometry)); } return((RectangleHitTestResultTreeNode)null); }
/// <summary> /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method. /// </summary> new public void HitTest(HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback, HitTestParameters hitTestParameters) { base.HitTest(filterCallback, resultCallback, hitTestParameters); }
public override ViewHitTestResult HitTest(Microsoft.Windows.Design.Interaction.ViewHitTestFilterCallback filterCallback, Microsoft.Windows.Design.Interaction.ViewHitTestResultCallback resultCallback, HitTestParameters hitTestParameters) { return((ViewHitTestResult)null); }
public abstract ViewHitTestResult HitTest(ViewHitTestFilterCallback filterCallback, ViewHitTestResultCallback resultCallback, HitTestParameters hitTestParameters);
public static void HitTestVisibleElements(Visual visual, HitTestResultCallback resultCallback, HitTestParameters parameters) { VisualTreeHelper.HitTest(visual, new HitTestFilterCallback(UtilityMethods.ExcludeNonVisualElements), resultCallback, parameters); }
public static void HitTestVisibleElements(Visual visual, HitTestResultCallback resultCallback, HitTestParameters parameters) { VisualTreeHelper.HitTest(visual, ExcludeNonVisualElements, resultCallback, parameters); }
public static HitTestResult HitTest(Visual root, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback, HitTestParameters hitTestParameters, HitTestFilterCallback modelCallback) { ModelHitTestHelper.HitTestFilterCallbackWrapper filterCallbackWrapper = new ModelHitTestHelper.HitTestFilterCallbackWrapper(filterCallback); ModelHitTestHelper.HitTestResultCallbackWrapper resultCallbackWrapper = new ModelHitTestHelper.HitTestResultCallbackWrapper(resultCallback, HitTestResultBehavior.Continue); VisualTreeHelper.HitTest(root, filterCallbackWrapper.FilterCallback, resultCallbackWrapper.ResultCallback, hitTestParameters); HitTestResult topMostHit = resultCallbackWrapper.TopMostHit; bool flag = filterCallback == null && resultCallback == null; VisualHitTestArgs args = new VisualHitTestArgs(root, root, hitTestParameters); PointHitTestParameters hitTestParameters1 = hitTestParameters as PointHitTestParameters; GeometryHitTestParameters hitTestParameters2 = hitTestParameters as GeometryHitTestParameters; foreach (DependencyObject dependencyObject in ModelHitTestHelper.GetDescendantsInZOrder((DependencyObject)root)) { if (dependencyObject != null) { if (filterCallback == null && topMostHit != null && dependencyObject == topMostHit.VisualHit) { resultCallbackWrapper.PlayResults(); return(resultCallbackWrapper.TopMostHit); } Visual visual = dependencyObject as Visual; HitTestProvider singletonProvider = ModelHitTestHelper.GetSingletonProvider(dependencyObject); if (singletonProvider != null && (modelCallback == null || modelCallback((DependencyObject)visual) != HitTestFilterBehavior.Continue)) { args.UpdateChild(dependencyObject); HitTestResult result = (HitTestResult)null; if (hitTestParameters1 != null && visual != null) { PointHitTestResult pointHitTestResult = singletonProvider.HitTestPoint(args); if (pointHitTestResult != null && pointHitTestResult.VisualHit != null) { result = (HitTestResult)pointHitTestResult; } } else if (hitTestParameters2 != null && visual != null) { GeometryHitTestResult geometryHitTestResult = singletonProvider.HitTestGeometry(args); if (geometryHitTestResult != null && geometryHitTestResult.IntersectionDetail != IntersectionDetail.Empty && geometryHitTestResult.IntersectionDetail != IntersectionDetail.NotCalculated) { result = (HitTestResult)geometryHitTestResult; } } if (result != null) { HitTestFilterBehavior testFilterBehavior = filterCallbackWrapper.FilterCallback(dependencyObject); switch (testFilterBehavior) { case HitTestFilterBehavior.Continue: case HitTestFilterBehavior.Stop: resultCallbackWrapper.InsertResult(result); break; } if (flag && testFilterBehavior != HitTestFilterBehavior.ContinueSkipSelf || testFilterBehavior == HitTestFilterBehavior.Stop) { resultCallbackWrapper.PlayResults(); return(result); } } } } } resultCallbackWrapper.PlayResults(); return(resultCallbackWrapper.TopMostHit); }