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è)一個標(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);
}
}
}
}
最后還有一點要注意,F(xiàn)inalValue需要反寫回Value中,Thumb的位置本質(zhì)上還是反映Value的值。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
文本框中輸入小寫字母即時轉(zhuǎn)換為大寫實現(xiàn)思路
系統(tǒng)中有一個文本框,要求輸入大寫字母,只是用戶不是那么配合所以只好在程序來控制了,感興趣的朋友可以參考下哈2013-03-03
Asp.Net中的字符串和HTML十進制編碼轉(zhuǎn)換實現(xiàn)代碼
這篇文章主要介紹了Asp.Net中的字符串和HTML十進制編碼轉(zhuǎn)換實現(xiàn)代碼,本文一并列出了javascript語言的實現(xiàn)方法,用以實現(xiàn)字符串和HTML十進制編碼之間互相轉(zhuǎn)換功能,需要的朋友可以參考下2014-08-08
sqlserver 批量數(shù)據(jù)替換助手V1.0版發(fā)布
前段時間網(wǎng)站被掛馬,數(shù)據(jù)庫表中很多文本字段都被加上了一段js腳本。修復(fù)完程序漏洞之后便開始著手清理這些被注入的數(shù)據(jù),其間參考了一些網(wǎng)上的方法,大都是寫一個存儲過程進行一個表一個表逐一清理。2011-10-10
asp.net 處理F5刷新頁面重復(fù)提交頁面的一個思路
當(dāng)提交完一個頁面后,如果我們再次點擊F5刷新該頁面的話,會彈出一個提示,提示我們?nèi)绻^續(xù),則會重新發(fā)送提交我們剛才提交的內(nèi)容,要是類似付款或一次性的操作,我們不應(yīng)該這樣操作,否則會造成重復(fù)提交的問題。2010-02-02

