3

我有这样的滑块:

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

我想做下一个行为:当 MouseDown 发生在滑块的任何点时,Thumb 不仅会移动一次到该点,而且还会跟随光标直到 MouseUp 发生。

抱歉,如果已经问过了,我找不到那个问题。

4

2 回答 2

3

当您拖动滑块拇指本身时才会发生此行为,这是设计使然。

但是,这里有一些代码可以做到这一点;-)

挂钩到 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 时才有效。
于 2013-04-08T01:43:04.713 回答
2

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;

     }
}
于 2015-07-01T06:18:21.847 回答