Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /// <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);
        }