我想创建具有少量依赖属性的自定义控件。
Thikness 返回类型的那些属性。
我的控件将被 Blend 中的设计师使用。
在 Blend 中,一些厚度属性是有限的。例如 BorderThickness 不能小于 0。
如何创建最小值为 1 和最大值为 3 的思维属性?(Blend 应该以与 BorderThickness 相同的方式验证数据 - 不允许用户输入)
我想创建具有少量依赖属性的自定义控件。
Thikness 返回类型的那些属性。
我的控件将被 Blend 中的设计师使用。
在 Blend 中,一些厚度属性是有限的。例如 BorderThickness 不能小于 0。
如何创建最小值为 1 和最大值为 3 的思维属性?(Blend 应该以与 BorderThickness 相同的方式验证数据 - 不允许用户输入)
您可以在注册时定义验证/强制属性回调。这个MSDN 页面对实现依赖属性验证有更详细的描述。
简而言之 - 您可以在注册时为任何属性指定验证和强制回调,并检查这些回调中的厚度值。
例如,下面是Border
'sBorderThickness
属性的注册方式(来自 ILSpy 的代码):
public static readonly DependencyProperty BorderThicknessProperty =
DependencyProperty.Register(
"BorderThickness",
typeof(Thickness),
typeof(Border),
new FrameworkPropertyMetadata(default(Thickness),
FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender,
new PropertyChangedCallback(Border.OnClearPenCache)),
new ValidateValueCallback(Border.IsThicknessValid));
这是验证方法本身:
private static bool IsThicknessValid(object value)
{
return ((Thickness)value).IsValid(false, false, false, false);
}