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

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:32:11
字體:
供稿:網(wǎng)友

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ù)就可以實(shí)現(xiàn)左右鍵的功能,但光改寫這一步還不行,如果在OnValue中不停的更改FinalValue的值那和原本的Slide還有什么區(qū)別呢?所以還要同步修改OnThumbStart,設(shè)一個標(biāo)志位。

最終代碼如下

  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);        }      }    }  }

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

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


注:相關(guān)教程知識閱讀請移步到ASP.NET教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乡宁县| 绩溪县| 黄浦区| 西畴县| 许昌市| 哈巴河县| 双辽市| 尉氏县| 留坝县| 临海市| 前郭尔| 塔河县| 阿拉善左旗| 东宁县| 双城市| 林西县| 株洲市| 鄢陵县| 鲁山县| 浦东新区| 黔西县| 泸溪县| 郯城县| 安康市| 汨罗市| 屯门区| 克东县| 衡山县| 临洮县| 高青县| 麻阳| 迭部县| 宣威市| 潼关县| 宁海县| 西充县| 邹平县| 嘉峪关市| 思茅市| 江陵县| 南澳县|