国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

WPF實現slide控件拖動完成后改變變量值

2024-07-10 12:49:14
字體:
來源:轉載
供稿:網友

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

首先一個最簡單最直接的方案就是自定義一個名為FinalValue的依賴屬性。隨后重載OnThumbDragCompleted函數,在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;    }  }

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

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

最終代碼如下

  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);        }      }    }  }            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 徐水县| 丹阳市| 安宁市| 米泉市| 定西市| 楚雄市| 宁陕县| 孝昌县| 贺兰县| 清徐县| 贺州市| 宁南县| 理塘县| 南投县| 沙湾县| 克山县| 商都县| 乌海市| 皋兰县| 汝阳县| 响水县| 循化| 永丰县| 莫力| 武安市| 资源县| 科技| 肇源县| 蓬莱市| 井冈山市| 尼勒克县| 灵寿县| 格尔木市| 黎平县| 新丰县| 耒阳市| 彭阳县| 祁连县| 峨山| 鸡泽县| 故城县|