private void kinectCoreWindow_PointerMoved(object sender, KinectPointerEventArgs args) { KinectPointerPoint kinectPointerPoint = args.CurrentPoint; if (kinectPointerPoint.Properties.IsEngaged) { // PointerPoints come with X/Y positions from 0.0 to 1.0 // To calculate the corresponding point in pixels, we multiple by width/height of KinectRegion Point pointRelativeToKinectRegion = new Point( kinectPointerPoint.Position.X * _kinectRegion.ActualWidth, kinectPointerPoint.Position.Y * _kinectRegion.ActualHeight); Point relativeToElement = _kinectRegion.TranslatePoint(pointRelativeToKinectRegion, _interactiveElement); bool insideElement = (relativeToElement.X >= 0 && relativeToElement.X < _interactiveElement.ActualWidth && relativeToElement.Y >= 0 && relativeToElement.Y < _interactiveElement.ActualHeight); if (insideElement) { if (!_isHandPointerEntered) { _isHandPointerEntered = true; _handPointerEnter?.Invoke(_interactiveElement, null); } } else { if (_isHandPointerEntered) { _isHandPointerEntered = false; _handPointerLeave?.Invoke(_interactiveElement, null); } } } }