/// <summary> /// Returns the topmost active input element at a point on an <see cref="IInputElement"/>. /// </summary> /// <param name="element">The element to test.</param> /// <param name="p">The point on <paramref name="element"/>.</param> /// <returns>The topmost <see cref="IInputElement"/> at the specified position.</returns> public static IInputElement InputHitTest(this IInputElement element, Point p) { return(element.GetInputElementsAt(p).FirstOrDefault()); }
private void SetPointerOver(IPointerDevice device, IInputElement element, Point p) { IEnumerable<IInputElement> hits = element.GetInputElementsAt(p); foreach (var control in this.pointerOvers.Except(hits).ToList()) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, OriginalSource = control, Source = control, }; this.pointerOvers.Remove(control); control.RaiseEvent(e); } foreach (var control in hits.Except(this.pointerOvers)) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerEnterEvent, Device = device, OriginalSource = control, Source = control, }; this.pointerOvers.Add(control); control.RaiseEvent(e); } }