验证回调用作针对一组静态约束对给定输入值的健全性检查。在验证回调中,检查正值是对验证的正确使用,但不检查其他属性。如果需要确保给定值小于从属属性,则应使用
property coercion
,像这样:
public static DependencyProperty AProperty = DependencyProperty.Register("A", typeof(double), typeof(ValidateTest), new PropertyMetadata(1.0, null, coerceValue), validateValue);
public static DependencyProperty BProperty = DependencyProperty.Register("B", typeof(double), typeof(ValidateTest), new PropertyMetaData(bChanged));
static object coerceValue(DependencyObject d, object value)
{
var bVal = (double)d.GetValue(BProperty);
if ((double)value > bVal)
return bVal;
return value;
}
static bool validateValue(object value)
{
return (double)value > 0;
}
如果设置a>b(就像validationcallback一样),这不会引发异常,但实际上这是所需的行为。由于您不知道属性的设置顺序,因此应该支持按任意顺序设置属性。
如果b的值发生变化,我们还需要告诉wpf强制属性a的值,因为强制值可能发生变化:
static void bChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
d.CoerceValue(AProperty);
}