2012-11-12 13 views
0

我想創建具有少量依賴屬性的自定義控件。如何在WPF控件中爲Thikness屬性添加最小和最大限制?

Thikness返回類型的那些屬性。

我的控制將由設計師在混合使用。

在Blend一些Thikness性質是有限的。 例如BorderThickness不能小於0.

如何使用最小值1和最大值3創建思維屬性? (Blend應以像BorderThickness一樣的方式驗證數據 - 不允許用戶輸入)

回答

1

您可以在註冊時定義驗證/強制屬性回調。這個MSDN page對實現依賴屬性驗證有更詳細的描述。

簡而言之 - 您可以在註冊時爲任何屬性指定驗證和強制回調,並檢查這些回調中的厚度值。

例如,這裏是怎麼BorderBorderThickness財產登記(代碼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); 
} 
+0

是否有可能得到最小值和最大值?例如,如果我想要在numericUpDown編輯器中修改這些值並設置最大值和最小值。 – Evgeny

+1

好吧,只需爲最小值和最大值添加兩個dep道具,並在驗證/強制代碼中使用這些道具。 – Jefim

+1

我會補充說,如果你想添加那些最小/最大值,你應該使用強制回調(也在我的答案中的鏈接討論),因爲驗證回調沒有任何訪問您的控件的實例。在強制回調中,您將控件實例作爲參數(鏈接到MSDN上的coercevaluecallback:http://msdn.microsoft.com/en-us/library/system.windows.coercevaluecallback.aspx) – Jefim

相關問題