我正在寻找看起来和行为就像VLC滑块一样的Volume Slider
我发现了以下有关如何设置滑块样式的帖子:Volume Slider CustomControl
但我也想要同样的行为......
行为之间有什么区别: 单击滑块[在WPF上]并在滑块区域上移动鼠标(当鼠标按钮仍然保持时),它应该将滑块也移动到滑块上鼠标的位置。
我找不到怎么做..也许我应该使用与Slider不同的东西?
感谢您的帮助!
答案 0 :(得分:7)
滑块上有一个名为IsMoveToPointEnabled的属性,可将滑块设置为正确的值,但只有在您点击它时才会在拖动时更新。
要在拖动时更新,您必须在移动鼠标时自行更新值,方法Track.ValueFromPoint会为您提供正确的值,该轨道是滑块模板的一部分。
实施例
public class DraggableSlider : Slider
{
public DraggableSlider()
{
this.IsMoveToPointEnabled = true;
}
private Track track;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
track = Template.FindName("PART_Track", this) as Track;
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if(e.LeftButton == MouseButtonState.Pressed && track != null)
{
Value = track.ValueFromPoint(e.GetPosition(track));
}
}
protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
{
base.OnPreviewMouseDown(e);
((UIElement)e.OriginalSource).CaptureMouse();
}
protected override void OnPreviewMouseUp(MouseButtonEventArgs e)
{
base.OnPreviewMouseUp(e);
((UIElement)e.OriginalSource).ReleaseMouseCapture();
}
}
OnPreviewMouseUp / Down覆盖捕获鼠标,我尝试了VLC并且没有捕获鼠标,因此您可以根据需要删除它们。即使鼠标离开控件类似于滚动条的工作方式,捕获鼠标也可以更改值。