我想创建一个具有多个 WPF 依赖属性的自定义控件。
其中一个属性正在返回 Thickness 对象。
自定义控件也应该适合设计者在 Microsoft Blend 中使用。
混合允许限制厚度等属性。 例如 BorderThickness 不能小于 0。
如何创建厚度属性最小值为 1、最大值为 3 的自定义控件?我期望 Blend 也能以与 Microsoft 默认控件的 BorderThickness 相同的方式直观地验证数据。
您可以在注册时定义验证/强制属性回调。这个MSDN页面有关于实现依赖属性验证的更详细的描述。
简而言之 - 当您注册任何属性并检查这些回调内部的厚度值时,您可以为任何属性指定验证和强制回调。
例如,以下是
Border
的 BorderThickness
属性的注册方式(来自 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);
}