/// <summary> /// Determine if the given point is on an adorner. /// </summary> /// <param name="point">point to test</param> /// <returns>AdornerHitTestResult containing the hit visual and the adorner that visual /// is part of. If the no adorner was hit, null is returned</returns> public AdornerHitTestResult AdornerHitTest(Point point) { PointHitTestResult result = VisualTreeUtils.AsNearestPointHitTestResult(VisualTreeHelper.HitTest(this, point, false)); if (result != null && result.VisualHit != null) { Visual visual = result.VisualHit; while (visual != this) { if (visual is Adorner) { return(new AdornerHitTestResult(result.VisualHit, result.PointHit, visual as Adorner)); } // we intentionally separate adorners from spanning 3D boundaries // and if the parent is ever 3D there was a mistake visual = (Visual)VisualTreeHelper.GetParent(visual); } return(null); } else { return(null); } }
internal static Visual GetElementFromPoint(IntPtr hwnd, Visual root, Point pointScreen) { HwndSource hwndSource = HwndSource.CriticalFromHwnd(hwnd); if (hwndSource == null) { return(null); } Point pointClient = PointUtil.ScreenToClient(pointScreen, hwndSource); Point pointRoot = PointUtil.ClientToRoot(pointClient, hwndSource); PointHitTestResult result = VisualTreeUtils.AsNearestPointHitTestResult(VisualTreeHelper.HitTest(root, pointRoot)); Visual visual = (result != null) ? result.VisualHit : null; return(visual); }
/// <summary>Gets an <see cref="T:System.Windows.Media.AdornerHitTestResult" /> for a specified point.</summary> /// <param name="point">The point to hit test.</param> /// <returns>An <see cref="T:System.Windows.Media.AdornerHitTestResult" /> for the specified point.</returns> // Token: 0x06002AB0 RID: 10928 RVA: 0x000C2FA0 File Offset: 0x000C11A0 public AdornerHitTestResult AdornerHitTest(Point point) { PointHitTestResult pointHitTestResult = VisualTreeUtils.AsNearestPointHitTestResult(VisualTreeHelper.HitTest(this, point, false)); if (pointHitTestResult != null && pointHitTestResult.VisualHit != null) { for (Visual visual = pointHitTestResult.VisualHit; visual != this; visual = (Visual)VisualTreeHelper.GetParent(visual)) { if (visual is Adorner) { return(new AdornerHitTestResult(pointHitTestResult.VisualHit, pointHitTestResult.PointHit, visual as Adorner)); } } return(null); } return(null); }