2013-09-30 105 views
0

由於WPF不包含NumericUpDown控件,如WinForms所述,我實現了自己的控件,並處理了上限和下限值以及其他驗證。WPF中的自定義NumericUpDown ValueChanged事件

現在,WinFormsNumericUpDown舉行ValueChanged事件,這也很好實施它。我的問題是:如何將TextBoxTextChangedEvent提升到我的主應用程序? Delegate s?或者有沒有其他的首選方法來實現這一點?

+0

創建一個事件,並在主要應用 – ethicallogics

+0

訂閱它,我認爲你可以從**純WPF的東西定製'NumericUpDown' **,'WPF'在'System.Windows.Controls.Primitives'一個的RepeatButton,只需添加一些'Te xtBox「和驗證。你可以有一個更優雅的數字下降。搜索這將幫助你與一些*樣本* –

回答

2

我個人更喜歡使用delegate來達到這個目的,因爲我可以爲它設置自己的輸入參數。我會做這樣的事情:

public delegate void ValueChanged(object oldValue, object newValue); 

使用object作爲數據類型將允許你在NumericUpDown控制使用不同的數值類型,但你不得不每次它轉換爲正確的類型..我想這個發現有點痛的,所以如果你的控制將只使用一種類型,int例如,那麼你可以改變你的delegate這樣:

public delegate void ValueChanged(int oldValue, int newValue); 

那麼你就需要爲公共財產控制器的用戶附加處理程序:

public ValueChanged OnValueChanged { get; set; } 

使用像這樣:

NumericUpDown.OnValueChanged += NumericUpDown_OnValueChanged; 

... 

public void NumericUpDown_OnValueChanged(int oldValue, int newValue) 
{ 
    // Do something with the values here 
} 

當然,這是沒有好,除非我們實際上是從控制內部調用該委託,並讓我們不要忘記的情況下,檢查null沒有處理程序已經被附:

public int Value 
{ 
    get { return theValue; } 
    set 
    { 
     if (theValue != value) 
     { 
      int oldValue = theValue; 
      theValue = value; 
      if (OnValueChanged != null) OnValueChanged(oldValue, theValue); 
      NotifyPropertyChanged("Value"); // Notify property change 
     } 
    } 
}