如何使WPF滑块拇指跟随光标从任何一点
本文关键字:光标 跟随 任何一 何使 WPF | 更新日期: 2023-09-27 18:08:00
我有这样的滑块:
<Slider Minimum="0" Maximum="100"
TickFrequency="1"
IsMoveToPointEnabled="True"
IsSnapToTickEnabled="False"/>
我想做下一个行为:当滑块的任何一点发生MouseDown时,拇指不仅向该点移动一次,而且还跟随光标移动一次,直到发生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设置。
也许这个解决方案在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;
}
}