我需要用滑块来控制视频位置(在另一种情况下还需要控制文档页面)。但问题是我不知道如何确定滑块值是由用户更改的(点击,拖动...),还是由绑定引起的。是否可能仅在滑块值从UI更新时触发某些事件,而不是从绑定更新?
我已经实现了自定义滑块:
我已经实现了自定义滑块:
public class NotifyingSlider : Slider
{
public static readonly DependencyProperty ValueChangedFromUIProperty =
DependencyProperty.Register("ValueChangedFromUI", typeof(ICommand), typeof(NotifyingSlider));
public ICommand ValueChangedFromUI
{
get
{
return (ICommand)GetValue(ValueChangedFromUIProperty);
}
set
{
SetValue(ValueChangedFromUIProperty, value);
}
}
protected override void OnThumbDragCompleted(DragCompletedEventArgs e)
{
base.OnThumbDragCompleted(e);
ValueChangedFromUI?.Execute(null);
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
ValueChangedFromUI?.Execute(null);
}
}
但是ValueChangedFromUI
命令只在用户将滑块拖动到特定位置或者精确点击到刻度条的位置时执行。当用户在两个刻度之间点击(因此值/滑块被移动到更近的一个),命令不会执行 - 这是我面临的主要问题。