1. 程式人生 > 其它 >Slider滑動條連續滑動

Slider滑動條連續滑動

記錄一個問題,在此感謝同事( 拚忘 - 部落格園 )提供的編碼方案

問題:如下圖所示 需要支援觸控(或滑鼠)按壓在1上支援滑動操作,目前僅僅在2上可以滑動操作,1上只能點選操作無法滑動。 

1 Slider滑動條支援拖動,需要將move事件轉換觸發PreviewMouseLeftButtonDownEvent事件模擬滑動操作。 

2 捕捉裝置,鎖定在當前Slider上

解決方案:

第一步 建立SliderAttach

 public static class SliderAttach
    {
        public static bool GetMoveToPointOnDrag(DependencyObject obj) { return
(bool)obj.GetValue(MoveToPointOnDragProperty); } public static void SetMoveToPointOnDrag(DependencyObject obj, bool value) { obj.SetValue(MoveToPointOnDragProperty, value); } /// <summary> /// 滾動條點選拖動附加屬性 /// </summary> public static readonly DependencyProperty MoveToPointOnDragProperty = DependencyProperty.RegisterAttached("
MoveToPointOnDrag", typeof(bool), typeof(SliderAttach), new PropertyMetadata { PropertyChangedCallback = (obj, changeEvent) => { var isDown = false; if (!(bool)changeEvent.NewValue) return; var slider = (Slider)obj;
if (!(slider.Parent is FrameworkElement parent)) return; parent.PreviewMouseDown += (sender, args) => { isDown = true; }; slider.MouseMove += (obj2, mouseEvent) => { if (mouseEvent.LeftButton != MouseButtonState.Pressed || !isDown) return; if (!slider.IsMouseCaptured) slider.CaptureMouse(); slider.RaiseEvent(new MouseButtonEventArgs(mouseEvent.MouseDevice, mouseEvent.Timestamp, MouseButton.Left) { RoutedEvent = UIElement.PreviewMouseLeftButtonDownEvent, Source = mouseEvent.Source, }); }; parent.PreviewMouseUp += (sender, args) => { isDown = false; slider.ReleaseMouseCapture(); }; } }); }

第二步: Slider 設定附件屬性

 <Slider  resources:SliderAttach.MoveToPointOnDrag="True"/>