【问题标题】:Slider - change value without clicking thumb滑块 - 无需单击拇指即可更改值
【发布时间】:2020-11-05 12:21:29
【问题描述】:

我试图在不点击拇指的情况下移动滑块。我现在所拥有的是单击滑块并将拇指移动到该位置。我想要做的是在鼠标单击仍然向下时能够移动拇指(更改值)。 (就像在 YouTube 或任何音频/视频播放器上一样) 这就是我现在所拥有的:

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

【问题讨论】:

  • 你不能仅仅通过调整属性来改变这种行为。我会使用 Blend 来提取滑块的默认样式,然后了解它的部分是如何工作的,然后通过子类化或使用一种行为来改变它,如果结果足够的话。滑块上有许多“不可见”的部分,它比您想象的要复杂得多!

标签: c# wpf mvvm wpf-controls mvvm-light


【解决方案1】:

我找到了这个解决方案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    相关资源
    最近更新 更多