簡體   English   中英

如何使WPF Slider Thumb從任何點跟隨光標

[英]How to make WPF Slider Thumb follow cursor from any point

我有這樣的滑塊:

<Slider Minimum="0" Maximum="100" 
TickFrequency="1"
IsMoveToPointEnabled="True"
IsSnapToTickEnabled="False"/>

我想做下一個行為:當MouseDown在滑塊的任何一點發生時,Thumb不僅會移動一次到該點,而且還會跟隨光標直到MouseUp發生。

對不起,如果已經問過,我找不到那個問題。

當您拖動滑塊拇指本身時,才會發生此行為。

但是 ,這里有一些代碼可以做到這一點;-)

掛鈎到XAML中的MouseMove事件:

<Slider MouseMove="Slider_OnMouseMove" IsMoveToPointEnabled="True"/>

然后插入此代碼:

private void Slider_OnMouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        var slider = (Slider)sender;
        Point position = e.GetPosition(slider);
        double d = 1.0d / slider.ActualWidth * position.X;
        var p = slider.Maximum * d;
        slider.Value = p;
    }
}

注意 :

  • 如果它們不同,您可能需要考慮滑塊的邊距和填充,我沒有。
  • 這是在水平滑塊上完成的。
  • 我的滑塊的最小值為0,如果最小值為負,請務必調整計算。
  • 最后,它似乎只在IsMoveToPointEnabled設置時才有效。

Aybe的解決方案在thumb_MouseMove事件中效果更好。

void timelineThumb_MouseMove(object sender, MouseEventArgs e)
{

     if (e.LeftButton == MouseButtonState.Pressed)
     {
         var thumb = sender as Thumb;

         Point pos = e.GetPosition(uiVideoPlayerTimelineSlider);
         double d = 1.0d / uiVideoPlayerTimelineSlider.ActualWidth * pos.X;
         uiVideoPlayerTimelineSlider.Value = uiVideoPlayerTimelineSlider.Maximum * d;

     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM