protected override void OnMouseMove(MouseEventArgs e)
        {
            var newMouseMoveOnElement = safeGetElement(HitVisual(e.GetPosition(this)));

            if (!Equals(_mouseMoveOnElement, newMouseMoveOnElement))
            {
                if (_mouseMoveOnElement != null)
                {
                    _mouseMoveOnElement.OnMouseLeave(e);
                }
                if (newMouseMoveOnElement != null)
                {
                    newMouseMoveOnElement.OnMouseEnter(e);
                }
            }
            if (_mouseMoveOnElement != null)
            {
                _mouseMoveOnElement.OnMouseMove(e);
            }
            _mouseMoveOnElement = newMouseMoveOnElement;
            base.OnMouseMove(e);
        }