2009-07-29 36 views
1

例如,我有一個依賴項屬性,它改變了Canvas的ScaleTransform,但是如果它低於零,它會引發錯誤。當然,如果這種情況發生,我可以強制它在代碼中爲零,但我寧願使用更好的方法,如使用udouble(無符號雙精度),這在Silverlight中不存在,甚至不能設置最小/最大值在DependencyProperty的某處。在Silverlight中,可以爲DependencyProperty定義最小/最大值嗎?

這裏最好的辦法是什麼?

回答

3

如果你打算在你的DependencyProperty中處理這個,我建議在PropertyChangedCallback中處理它,它將驗證該值是否在正確的範圍內,否則將覆蓋它。

你也可以在依賴項屬性之外處理這個。例如:

+0

這就是我最終做的 - 在PropertyChangedCallback中更改它,但我正在尋找替代方案。感謝這裏的額外鏈接。 – jedmao 2009-08-01 20:32:21

1

只是爲了補充一點,在你的PropertyChangedCallback中,一個典型的模式將在拋出異常之前在不正確的/超出範圍的值上恢復。

如果您沒有進行恢復,超出範圍的值實際上仍然會被設置,並且您的狀態將會失效。

在Silverlight工具包的某些部分中,您會看到這個「窮人的可憐人」的例子。這是AutoCompleteBox.cs source

的模式是這樣的:

int newValue = (int)e.NewValue; 
     if (newValue < 0) 
     { 
      source._ignorePropertyChange = true; 
      d.SetValue(e.Property, e.OldValue); 

      throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, Properties.Resources.AutoComplete_OnMinimumPopulateDelayPropertyChanged_InvalidValue, newValue), "value"); 
     } 

您也可以實現自己的「只讀」以類似的方式Silverlight的依賴屬性,但它會需要一個私有字段表明您是否是設置或恢復該值。

相關問題