如何在WPF控件中为厚度属性添加最小和最大限制?
我想创建具有少量依赖属性的自定义控件 厚度返回类型的那些属性 我的控件将由Blend中的设计师使用 在共混物中,某些厚度特性受到限制。 例如,BorderThickness不能小于0如何在WPF控件中为厚度属性添加最小和最大限制?,wpf,wpf-controls,dependency-properties,Wpf,Wpf Controls,Dependency Properties,我想创建具有少量依赖属性的自定义控件 厚度返回类型的那些属性 我的控件将由Blend中的设计师使用 在共混物中,某些厚度特性受到限制。 例如,BorderThickness不能小于0 如何使用最小值1和最大值3创建thinkness属性?(Blend应以与BorderThickness相同的方式验证数据-不允许用户输入)您可以在注册时定义验证/强制属性回调。这对实现依赖项属性验证有更详细的描述 简而言之,您可以在注册任何属性并检查这些回调中的厚度值时为其指定验证和强制回调 例如,下面是如何注册B
如何使用最小值1和最大值3创建thinkness属性?(Blend应以与BorderThickness相同的方式验证数据-不允许用户输入)您可以在注册时定义验证/强制属性回调。这对实现依赖项属性验证有更详细的描述 简而言之,您可以在注册任何属性并检查这些回调中的厚度值时为其指定验证和强制回调 例如,下面是如何注册
Border
的BorderThickness
属性(来自ILSpy的代码):
下面是验证方法本身:
private static bool IsThicknessValid(object value)
{
return ((Thickness)value).IsValid(false, false, false, false);
}
有可能得到最小值和最大值吗?例如,如果我想在numericUpDown编辑器中修改这些值,并设置max和min。那么,只需为min和max值添加两个dep道具,并在验证/强制代码中使用它们。我想补充一点,如果你想添加那些min/max值,你应该使用强制回调(也在我回答中的链接中讨论)因为validate回调对控件的实例没有任何访问权限。在强制回调中,您将控件实例作为参数(链接到MSDN:)获取。同样,是什么阻止您在强制回调方法中引发异常?我不明白你说的“如何从这个默认属性中获取最小值和最大值”是什么意思。依赖项属性本身没有最小值和最大值。您可以通过在control.Dep上定义两个附加的依赖项属性(用于最小值和最大值)来实现它们。道具没有“最小”和“最大”边界。现有的
BorderThickness
也没有任何最小/最大值。由于验证回调:((厚度)值)。它不允许将其设置为无效值(例如-1,0,0,0)。IsValid(false,false,false,false)
-这就是无法将其设置为无效值的原因。详细信息-如果厚度具有无效值,并且由于该依赖关系属性不接受该值,则验证回调将返回false
。BorderThickness
属性上没有最小/最大值。
private static bool IsThicknessValid(object value)
{
return ((Thickness)value).IsValid(false, false, false, false);
}