Filip Filipovic
Filip Filipovic

Reputation: 410

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}"/>

Upvotes: 0

Views: 356

Answers (1)

Filip Filipovic
Filip Filipovic

Reputation: 410

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);

Upvotes: 3

Related Questions