public override bool OnMouseMove(MouseEditorEventArgs args)
        {
            removeAdorner();

            // Find an element under the mouse with NodeInput DataContext
            var feWithNodeInputDC = VisualTreeUtils.HitTestWithDataContext <NodeInput>(nodeEditor, args.Position);

            if (feWithNodeInputDC != null)
            {
                toNodeInput = feWithNodeInputDC.DataContext as NodeInput;
                toNode      = VisualTreeUtils.GetDataContextOnParents <Node>(feWithNodeInputDC);
                previewConnectionPath.DataContext = new Connection(node, nodeOutput, toNode, toNodeInput);

                // Create the adorner
                feWithNodeInputDC = VisualTreeUtils.GetLastParentWithDataContextOfType <NodeInput>(feWithNodeInputDC);
                mAdorner          = new SimpleCircleAdorner(feWithNodeInputDC);
                var myAdornerLayer = AdornerLayer.GetAdornerLayer(feWithNodeInputDC);
                myAdornerLayer.Add(mAdorner);
            }
            else
            {
                toNode      = null;
                toNodeInput = null;
                previewConnectionPath.DataContext = new Connection(node, nodeOutput, null, null);
            }

            nodeEditor.InvalidatePreview();

            return(true);
        }