public static void ViewportThumbDragStarted(object sender, DragStartedEventArgs e)
        {
            var scrollThumb = VisualTreeExtraHelper.FindVisualParent <Thumb>(sender as DependencyObject);

            if (scrollThumb != null)
            {
                OriginalWidth = scrollThumb.ActualWidth;
                e.Handled     = true;
            }
        }
        public static void ViewportThumbDragDelta(object sender, DragDeltaEventArgs e)
        {
            var scrollThumb = VisualTreeExtraHelper.FindVisualParent <Thumb>(sender as DependencyObject);

            if (scrollThumb != null)
            {
                var scrollThumbMargin = scrollThumb.Margin;
                scrollThumbMargin.Left += e.HorizontalChange;
                scrollThumb.Margin      = scrollThumbMargin;
                e.Handled = true;
            }
        }
        public static void ViewportThumbDragCompleted(object sender, DragCompletedEventArgs e)
        {
            var scrollThumb = VisualTreeExtraHelper.FindVisualParent <Thumb>(sender as DependencyObject);

            if (scrollThumb != null)
            {
                var newMarginLeft = scrollThumb.Margin.Left;
                var change        = (newMarginLeft - OriginalWidth) * -1;
                var scale         = OriginalWidth / scrollThumb.ActualWidth;

                scrollThumb.Margin = new Thickness(-9, 1, -9, 1); // reset the margin back to what it was

                ZoomViewportCommand.Execute(
                    new TimelineZoomViewportParameters()
                {
                    ViewportAnchor = TimelineZoomAnchor.Right,
                    ViewportScale  = scale
                },
                    scrollThumb
                    );

                e.Handled = true;
            }
        }