Slider.ValueChanged 事件的默认行为是在用户拖动控件时多次触发 ValueChanged。有没有办法只在拖动结束时触发这个事件?

我已经尝试过的一件事是绑定(bind)到 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
}

当用户完成拖动、单击滑块本身或使用箭头、Home 或 End 键更改值时,这应该调用 HandleSliderValueChange 方法。

关于windows-8 - XAML Windows 应用商店应用程序 - 在拖动过程中忽略 Slider.ValueChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16025524/

10-12 03:58