0
我想創建具有少量依賴屬性的自定義控件。如何在WPF控件中爲Thikness屬性添加最小和最大限制?
Thikness返回類型的那些屬性。
我的控制將由設計師在混合使用。
在Blend一些Thikness性質是有限的。 例如BorderThickness不能小於0.
如何使用最小值1和最大值3創建思維屬性? (Blend應以像BorderThickness一樣的方式驗證數據 - 不允許用戶輸入)
我想創建具有少量依賴屬性的自定義控件。如何在WPF控件中爲Thikness屬性添加最小和最大限制?
Thikness返回類型的那些屬性。
我的控制將由設計師在混合使用。
在Blend一些Thikness性質是有限的。 例如BorderThickness不能小於0.
如何使用最小值1和最大值3創建思維屬性? (Blend應以像BorderThickness一樣的方式驗證數據 - 不允許用戶輸入)
您可以在註冊時定義驗證/強制屬性回調。這個MSDN page對實現依賴屬性驗證有更詳細的描述。
簡而言之 - 您可以在註冊時爲任何屬性指定驗證和強制回調,並檢查這些回調中的厚度值。
例如,這裏是怎麼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);
}
是否有可能得到最小值和最大值?例如,如果我想要在numericUpDown編輯器中修改這些值並設置最大值和最小值。 – Evgeny
好吧,只需爲最小值和最大值添加兩個dep道具,並在驗證/強制代碼中使用這些道具。 – Jefim
我會補充說,如果你想添加那些最小/最大值,你應該使用強制回調(也在我的答案中的鏈接討論),因爲驗證回調沒有任何訪問您的控件的實例。在強制回調中,您將控件實例作爲參數(鏈接到MSDN上的coercevaluecallback:http://msdn.microsoft.com/en-us/library/system.windows.coercevaluecallback.aspx) – Jefim