2013-03-18 26 views
0

我已經創建了一個將它作爲基類來處理某些功能的類。現在我想擴大這個班級的工作。但是這裏有一些我不希望被用戶顯示的屬性。所以問題是如何隱藏一些依賴屬性。如何從子類中隱藏DependencyPropery?

我知道BrowsableAttribute但我不能在我的基類中使用它,因爲這被其他類使用。所以我只想隱藏新擴展類中的一些屬性。

public class BaseControl : Control 
    { 
     static BaseControl() 
     { 
      DefaultStyleKeyProperty.OverrideMetadata(typeof(BaseControl), new FrameworkPropertyMetadata(typeof(BaseControl))); 
     } 



     public int BaseProperty 
     { 
      get { return (int)GetValue(BasePropertyProperty); } 
      set { SetValue(BasePropertyProperty, value); } 
     } 

     // Using a DependencyProperty as the backing store for BaseProperty. This enables animation, styling, binding, etc... 
     public static readonly DependencyProperty BasePropertyProperty = 
      DependencyProperty.Register("BaseProperty", typeof(int), typeof(BaseControl), new UIPropertyMetadata(100)); 


    } 

    public class Child1Control : BaseControl 
    { 
     // Using BaseProperty for internal Uses. 
    } 

    public class Child2Control : BaseControl 
    { 
     //TODO: How To HIDE the BasePropery here so that 
    } 
+0

如果用戶使用基類,用戶是否應該能夠訪問該屬性? – 2013-03-18 15:08:59

+0

沒有那個屬性需要完全隱藏。 – JSJ 2013-03-18 15:09:51

+0

很難說沒有一個例子,但爲什麼不把它們設置爲「私人」? – 2013-03-18 15:11:18

回答

0

如果基類有一個不應該由子類進行訪問,不應該通過分級代碼訪問的屬性,使私有財產:

public MyBaseClass 
{ 
    private string MyProperty { get; set; } 


} 

或者使用私有變量,而不是屬性:

public MyBaseClass 
{ 
    private string _myProperty; 


} 
+0

我應該修改這一點,說私人物業的能力可以在任何種類的類中使用,而不僅僅是作爲其他類的基類使用的類:) – 2013-03-18 15:19:05

+0

問題是關於[DependencyProperties](http://msdn.microsoft.com /en-us/library/ms752914.aspx)。儘管依賴項屬性具有CLR屬性作爲包裝器,但它們必須是公共的。如果它們是私有的,則XAML,WPF屬性系統將無法訪問底層的依賴項屬性。 – Tilak 2013-03-18 15:28:56

0

,如果你不希望重寫這些屬性在做,只是把它們註冊爲ReadOnly

+0

不利於我改變現有的屬性 – JSJ 2013-03-18 15:33:24