Slider.ValueChanged 事件的默认行为是在用户拖动控件时多次触发 ValueChanged。有没有办法只在拖动结束时触发这个事件?
我已经尝试过的一件事是绑定到 Thumb.DragStarted 和 Thumb.DragCompleted 事件,并添加一些标志来控制进程,但是如果用户在滑块之外单击滑块的主体,则不会触发这些事件。
Slider.ValueChanged 事件的默认行为是在用户拖动控件时多次触发 ValueChanged。有没有办法只在拖动结束时触发这个事件?
我已经尝试过的一件事是绑定到 Thumb.DragStarted 和 Thumb.DragCompleted 事件,并添加一些标志来控制进程,但是如果用户在滑块之外单击滑块的主体,则不会触发这些事件。
如果您不想自定义控件,您可以处理KeyUp
事件和PointerCaptureLost
事件而不是处理ValueChanged
事件。
private void slider_PointerCaptureLost(object sender, PointerRoutedEventArgs e)
{
HandleSliderValueChange();
}
private void slider_KeyUp(object sender, KeyRoutedEventArgs e)
{
//Make sure an arrow key, Home, or End was pressed
//either explicitly perform the flag checks
//if(e.Key.HasFlag(VirtualKey.Up & VirtualKey.Down & VirtualKey.Left & VirtualKey.Right & VirtualKey.Home & VirtualKey.End))
//or check the int values
int keyVal = (int)e.Key;
if(keyVal >= 35 && keyVal <= 40)
HandleSliderValueChange();
}
private void HandleSliderValueChange()
{
//your value changed code
}
这应该HandleSliderValueChange
在用户完成拖动、单击滑块本身或使用箭头、Home 或 End 键更改值时调用该方法。