如何为自定义WPF控件添加最小和最大验证?

问题描述 投票:0回答:1

我想创建一个具有多个 WPF 依赖属性的自定义控件。

其中一个属性正在返回 Thickness 对象。

自定义控件也应该适合设计者在 Microsoft Blend 中使用。

混合允许限制厚度等属性。 例如 BorderThickness 不能小于 0。

如何创建厚度属性最小值为 1、最大值为 3 的自定义控件?我期望 Blend 也能以与 Microsoft 默认控件的 BorderThickness 相同的方式直观地验证数据。

wpf wpf-controls dependency-properties blend
1个回答
1
投票

您可以在注册时定义验证/强制属性回调。这个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);
}
© www.soinside.com 2019 - 2024. All rights reserved.