0

我想创建具有少量依赖属性的自定义控件。

Thikness 返回类型的那些属性。

我的控件将被 Blend 中的设计师使用。

在 Blend 中,一些厚度属性是有限的。例如 BorderThickness 不能小于 0。

如何创建最小值为 1 和最大值为 3 的思维属性?(Blend 应该以与 BorderThickness 相同的方式验证数据 - 不允许用户输入)

4

1 回答 1

1

您可以在注册时定义验证/强制属性回调。这个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);
}
于 2012-11-12T10:54:11.413 回答