1

例如,我有一个依赖属性可以更改 Canvas 的 ScaleTransform,但如果它低于零,则会引发错误。当然,如果发生这种情况,我可以在代码中将其强制为零,但我宁愿使用更好的方法,例如使用 Silverlight 中不存在的 udouble(无符号双精度),甚至设置最小/最大值DependencyProperty 中的某处。

这里最好的方法是什么?

4

2 回答 2

3

如果您要在 DependencyProperty 中处理它,我建议在PropertyChangedCallback中处理它,它会验证该值是否在正确的范围内,如果不是则覆盖它。

您也可以在依赖属性之外处理这个问题。例如:

于 2009-07-29T21:10:33.333 回答
1

除此之外,在您的 PropertyChangedCallback 中,一个典型的模式将在抛出异常之前恢复不正确/超出范围的值。

如果您不执行还原,实际上仍会设置超出范围的值,并且您的状态将无效。

您将在一些 Silverlight 工具包中看到这种“穷人的胁迫”的示例。这是AutoCompleteBox.cs 源代码

模式类似于:

   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 依赖项属性,但它需要一个私有字段来指示您是在设置还是恢复该值。

于 2009-08-02T17:52:33.447 回答