原文地址:
https://wpf.2000things.com/2010/11/12/123-coercing-a-dependency-property/
在一个类中使用依赖属性的时候,可以选择在注册该依赖属性的时候指定一个强制转换回调函数(coercion callback)。当属性将要返回一个属性值的时候该回调函数被调用。通过强制转换回调函数可以强制改变依赖属性的值。
在注册依赖属性的时候,通过CoerceValueCallback 委托指定强制转回调函数
PropertyMetadata ageMetadata =
new PropertyMetadata(
18, // Default value
new PropertyChangedCallback(OnAgeChanged),
new CoerceValueCallback(OnAgeCoerceValue)); // ** 运行类对依赖属性值进行强制转换
// Register the property
AgeProperty =
DependencyProperty.Register(
"Age", // Property's name
typeof(int), // Property's type
typeof(Person), // Defining class' type
ageMetadata, // Defines default value & changed/coercion callbacks (optional)
new ValidateValueCallback(OnAgeValidateValue)); // validation (optional)
通过强制转换设置属性值的最大和最小范围
private static object OnAgeCoerceValue
(DependencyObject depObj, object baseValue)
{
int coercedValue = (int)baseValue;
if ((int)baseValue > 120)
coercedValue = 120;
if ((int)baseValue < 1)
coercedValue = 1;
return coercedValue;
}