Jer*_*xon 6 windows-8 winrt-xaml
在XAML中我有<Slider />.它有ValueChanged事件.每次更改Value时都会触发此事件.我需要检测值变化何时结束.LostFocus,PointerReleased不是正确的事件.我怎么能发现这个?
您可以创建一个新类并从Slider继承.从那以后,您可以查找Thumb控件并聆听您想要的事件.
这样的事情应该有效:
public class SliderValueChangeCompletedEventArgs : RoutedEventArgs
{
    private readonly double _value;
    public double Value { get { return _value; } }
    public SliderValueChangeCompletedEventArgs(double value)
    {
        _value = value;
    }
}
public delegate void SlideValueChangeCompletedEventHandler(object sender, SliderValueChangeCompletedEventArgs args);
public class ExtendedSlider : Slider
{
    public event SlideValueChangeCompletedEventHandler ValueChangeCompleted;
    private bool _dragging = false;
    protected void OnValueChangeCompleted(double value)
    {
        if (ValueChangeCompleted != null)
        {
            ValueChangeCompleted(this, new SliderValueChangeCompletedEventArgs(value) );
        }
    }
    protected override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        var thumb = base.GetTemplateChild("HorizontalThumb") as Thumb;
        if (thumb != null)
        {
            thumb.DragStarted += ThumbOnDragStarted;
            thumb.DragCompleted += ThumbOnDragCompleted;
        }
        thumb = base.GetTemplateChild("VerticalThumb") as Thumb;
        if (thumb != null)
        {
            thumb.DragStarted += ThumbOnDragStarted;
            thumb.DragCompleted += ThumbOnDragCompleted;
        }
    }
    private void ThumbOnDragCompleted(object sender, DragCompletedEventArgs e)
    {
        _dragging = false;
        OnValueChangeCompleted(this.Value);
    }
    private void ThumbOnDragStarted(object sender, DragStartedEventArgs e)
    {
        _dragging = true;
    }
    protected override void OnValueChanged(double oldValue, double newValue)
    {
        base.OnValueChanged(oldValue, newValue);
        if (!_dragging)
        {
            OnValueChangeCompleted(newValue);
        }
    }
}
| 归档时间: | 
 | 
| 查看次数: | 2473 次 | 
| 最近记录: |