private void Canvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var handle = e.Source as TrackDragHandle;

            if (handle != null)
            {
                this.trackBeingMoved = handle.Parent as TrackElement;

                if (this.trackBeingMoved != null)
                {
                    MoveTracks(this.trackBeingMoved, true);

                    this.trackBeingMovedStartPoint = e.GetPosition(null);
                    this.trackBeingMovedOrigin     = new Point(Canvas.GetLeft(this.trackBeingMoved), Canvas.GetTop(this.trackBeingMoved));
                    Canvas.SetLeft(this.trackBeingMoved, 20);
                    Canvas.SetZIndex(this.trackBeingMoved, 20);

                    // Create insertion point
                    this.insertionPointCanvas       = new InsertionPointCanvas();
                    this.insertionPointCanvas.Width = this.canvas.ActualWidth;
                    Canvas.SetLeft(this.insertionPointCanvas, 0);
                    Canvas.SetTop(this.insertionPointCanvas, Canvas.GetTop(this.trackBeingMoved));
                    Canvas.SetZIndex(this.insertionPointCanvas, 10);

                    this.canvas.Children.Add(this.insertionPointCanvas);
                }
            }
        }
        private void Canvas_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (this.trackBeingMoved != null)
            {
                Canvas.SetTop(this.trackBeingMoved, Canvas.GetTop(this.insertionPointCanvas));
                Canvas.SetLeft(this.trackBeingMoved, 0);
                Canvas.SetZIndex(this.trackBeingMoved, 0);

                MoveTracks(this.trackBeingMoved, false);

                this.trackBeingMoved = null;
            }

            if (this.insertionPointCanvas != null)
            {
                this.canvas.Children.Remove(this.insertionPointCanvas);
                this.insertionPointCanvas = null;
            }
        }