WPF實(shí)現(xiàn)slide控件拖動(dòng)完成后改變變量值
WPF中使slide控件拖動(dòng)完成后改變變量值這個(gè)問(wèn)題一開(kāi)始覺(jué)得還是挺簡(jiǎn)單的,網(wǎng)上也看到不少解決方案。
首先一個(gè)最簡(jiǎn)單最直接的方案就是自定義一個(gè)名為FinalValue的依賴屬性。隨后重載OnThumbDragCompleted函數(shù),在Thumb控件完成拖動(dòng)時(shí)改寫(xiě)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;
}
}
試著跑一下,似乎搞定了。等一下,左右鍵怎么不起作用了??磥?lái)還有問(wèn)題。
跟了一下,發(fā)覺(jué)只需要重寫(xiě)OnValue這個(gè)函數(shù)就可以實(shí)現(xiàn)左右鍵的功能,但光改寫(xiě)這一步還不行,如果在OnValue中不停的更改FinalValue的值那和原本的Slide還有什么區(qū)別呢?所以還要同步修改OnThumbStart,設(shè)一個(gè)標(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需要反寫(xiě)回Value中,Thumb的位置本質(zhì)上還是反映Value的值。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
文本框中輸入小寫(xiě)字母即時(shí)轉(zhuǎn)換為大寫(xiě)實(shí)現(xiàn)思路
系統(tǒng)中有一個(gè)文本框,要求輸入大寫(xiě)字母,只是用戶不是那么配合所以只好在程序來(lái)控制了,感興趣的朋友可以參考下哈2013-03-03
.NET實(shí)現(xiàn)異步編程async和await
這篇文章介紹了.NET實(shí)現(xiàn)異步編程async和await的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
Asp.Net中的字符串和HTML十進(jìn)制編碼轉(zhuǎn)換實(shí)現(xiàn)代碼
這篇文章主要介紹了Asp.Net中的字符串和HTML十進(jìn)制編碼轉(zhuǎn)換實(shí)現(xiàn)代碼,本文一并列出了javascript語(yǔ)言的實(shí)現(xiàn)方法,用以實(shí)現(xiàn)字符串和HTML十進(jìn)制編碼之間互相轉(zhuǎn)換功能,需要的朋友可以參考下2014-08-08
sqlserver 批量數(shù)據(jù)替換助手V1.0版發(fā)布
前段時(shí)間網(wǎng)站被掛馬,數(shù)據(jù)庫(kù)表中很多文本字段都被加上了一段js腳本。修復(fù)完程序漏洞之后便開(kāi)始著手清理這些被注入的數(shù)據(jù),其間參考了一些網(wǎng)上的方法,大都是寫(xiě)一個(gè)存儲(chǔ)過(guò)程進(jìn)行一個(gè)表一個(gè)表逐一清理。2011-10-10
asp.net 處理F5刷新頁(yè)面重復(fù)提交頁(yè)面的一個(gè)思路
當(dāng)提交完一個(gè)頁(yè)面后,如果我們?cè)俅吸c(diǎn)擊F5刷新該頁(yè)面的話,會(huì)彈出一個(gè)提示,提示我們?nèi)绻^續(xù),則會(huì)重新發(fā)送提交我們剛才提交的內(nèi)容,要是類(lèi)似付款或一次性的操作,我們不應(yīng)該這樣操作,否則會(huì)造成重復(fù)提交的問(wèn)題。2010-02-02

