我有这样的滑块:如何使WPF滑块跟随光标从任何一点
<Slider Minimum="0" Maximum="100"
TickFrequency="1"
IsMoveToPointEnabled="True"
IsSnapToTickEnabled="False"/>
我要让未来的行为: 时的MouseDown发生在滑块的任何一点,大拇指不仅是移动一次到点,但也跟随光标,直到出现鼠标上。
对不起,如果它已被问到,我找不到这个问题。
我有这样的滑块:如何使WPF滑块跟随光标从任何一点
<Slider Minimum="0" Maximum="100"
TickFrequency="1"
IsMoveToPointEnabled="True"
IsSnapToTickEnabled="False"/>
我要让未来的行为: 时的MouseDown发生在滑块的任何一点,大拇指不仅是移动一次到点,但也跟随光标,直到出现鼠标上。
对不起,如果它已被问到,我找不到这个问题。
此行为将会发生只有当您拖动滑块本身时,它是通过设计。
然而,这里的一些代码,将做到这一点;-)
钩到MouseMove事件中的XAML:
<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;
}
}
注:
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;
}
}
这很好,但是对于Slider.Orientation = Orientation.Vertical的检查和代码会让它变得金黄。 – TernaryTopiary 2016-09-23 08:14:45
非常感谢你) – 2013-04-08 11:42:44
我更新了我的代码,使用ActualWidth而不是Width,因为它有时是一个NaN值,会导致异常。 – Aybe 2013-04-11 16:21:34