Search code examples
c#wpfmvvmwpf-controlsmvvm-light

Slider - change value without clicking thumb


I am trying to move slider without clicking on thumb. What i have for now is clicking on slider and moving thumb to that position. What i want to do is while mouse click is still down to be able to move thumb(change value). (just like on YouTube or any audio/video player) This is what i have for now:

<Slider MouseLeave="Slider_MouseLeave" 
    MouseMove="Slider_MouseMove" 
    IsMoveToPointEnabled ="True" 
    PreviewMouseUp="Slider_PreviewMouseUp" 
    Thumb.DragStarted="Slider_DragStarted" 
    Thumb.DragCompleted="Slider_SaveChange" 
    Minimum="0" 
    Maximum="{Binding HomeViewSettings.SelectedTrack.TrackTime.TotalSeconds}" 
    Value="{Binding HomeViewSettings.CurrentTrackProgressInValue}"/>

Solution

  • I found this soludin:

    mySlider.MouseMove += (sender, args) =>
            {
                if (args.LeftButton == MouseButtonState.Pressed && this.clickedInSlider)
                {
                    var thumb = (mySlider.Template.FindName("PART_Track", mySlider) as System.Windows.Controls.Primitives.Track).Thumb;
                    thumb.RaiseEvent(new MouseButtonEventArgs(args.MouseDevice, args.Timestamp, MouseButton.Left)
                    {
                        RoutedEvent = UIElement.MouseLeftButtonDownEvent,
                        Source = args.Source
                    });
                }
            };
    
            mySlider.AddHandler(UIElement.PreviewMouseLeftButtonDownEvent, new RoutedEventHandler((sender, args) =>
            {
                clickedInSlider = true;
            }), true);
    
            mySlider.AddHandler(UIElement.PreviewMouseLeftButtonUpEvent, new RoutedEventHandler((sender, args) =>
            {
                clickedInSlider = false;
            }), true);