亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

WPF實現(xiàn)slide控件拖動完成后改變變量值

 更新時間:2017年03月27日 09:09:22   作者:rigid  
這篇文章主要為大家詳細介紹了WPF實現(xiàn)slide控件拖動完成后改變變量值,具有一定的參考價值,感興趣的小伙伴們可以參考一下

WPF中使slide控件拖動完成后改變變量值這個問題一開始覺得還是挺簡單的,網(wǎng)上也看到不少解決方案。

首先一個最簡單最直接的方案就是自定義一個名為FinalValue的依賴屬性。隨后重載OnThumbDragCompleted函數(shù),在Thumb控件完成拖動時改寫FinalValue。代碼如下

  public class SliderIgnoreDelta : Slider
  {
    public int FinalValue
    {
      get { return (int)GetValue(FinalValueProperty); }
      set { SetValue(FinalValueProperty, value); }
    }

    public static readonly DependencyProperty FinalValueProperty =
      DependencyProperty.Register(
        "FinalValue", typeof(int), typeof(SliderIgnoreDelta),
        new FrameworkPropertyMetadata(0,
          FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnFinalValueChanged));

    private static void OnFinalValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
      int result;
      if (int.TryParse(e.NewValue.ToString(), out result))
      {
        if (((SliderIgnoreDelta) sender).Value != result)
        {
          ((SliderIgnoreDelta) sender).Value = result;
        }
      }
    }

    protected override void OnThumbDragCompleted(System.Windows.Controls.Primitives.DragCompletedEventArgs e)
    {
      base.OnThumbDragCompleted(e);
      FinalValue = (int)Value;
    }
  }

試著跑一下,似乎搞定了。等一下,左右鍵怎么不起作用了。看來還有問題。

跟了一下,發(fā)覺只需要重寫OnValue這個函數(shù)就可以實現(xiàn)左右鍵的功能,但光改寫這一步還不行,如果在OnValue中不停的更改FinalValue的值那和原本的Slide還有什么區(qū)別呢?所以還要同步修改OnThumbStart,設(shè)一個標志位。

最終代碼如下

  public class SliderIgnoreDelta : Slider
  {
    public int FinalValue
    {
      get { return (int)GetValue(FinalValueProperty); }
      set { SetValue(FinalValueProperty, value); }
    }

    public static readonly DependencyProperty FinalValueProperty =
      DependencyProperty.Register(
        "FinalValue", typeof(int), typeof(SliderIgnoreDelta),
        new FrameworkPropertyMetadata(0,
          FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnFinalValueChanged));

    private static void OnFinalValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
      int result;
      if (int.TryParse(e.NewValue.ToString(), out result))
      {
        if (((SliderIgnoreDelta) sender).Value != result)
        {
          ((SliderIgnoreDelta) sender).Value = result;
        }
      }
    }

    public bool IsDragging { get; protected set; }
    protected override void OnThumbDragCompleted(System.Windows.Controls.Primitives.DragCompletedEventArgs e)
    {
      IsDragging = false;
      base.OnThumbDragCompleted(e);
      OnValueChanged(Value, Value);
    }

    protected override void OnThumbDragStarted(System.Windows.Controls.Primitives.DragStartedEventArgs e)
    {
      IsDragging = true;
      base.OnThumbDragStarted(e);
    }

    protected override void OnValueChanged(double oldValue, double newValue)
    {
      if (!IsDragging)
      {
        base.OnValueChanged(oldValue, newValue);
        if (FinalValue != (int)Math.Round(Value, 0))
        {
          FinalValue = (int)Math.Round(Value, 0);
        }
      }
    }
  }

最后還有一點要注意,F(xiàn)inalValue需要反寫回Value中,Thumb的位置本質(zhì)上還是反映Value的值。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論