예제 #1
0
 /// <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());
 }
예제 #2
0
        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);
            }
        }