2011-03-25 101 views
3

冒着嘲弄和冒出來打破一些設計規則的風險我有以下問題。暴露用戶控件中的控件

我們創建了一些Usercontrols,我們通過使用Properties來暴露這些usercontrols上的控件。然後,我們在設計器中更改這些問題,進一步調整用戶控件(對於特定的表單),無論什麼時候我們不保存任何內容都是由設計人員編寫的,並且更改實際上並未保存。

當我們將更改硬編碼到設計器文件中時,所做的更改將被保存,如果我們通過設計器手動更改屬性並保存之前所有更改都將被丟棄,則可以使用此更改。

我們打破了一些模式/設計規則?這是一個錯誤,有沒有更好的方法來做到這一點?

Greetings,

F.B. ten Kate

+0

對不起,這是在winforms中,我不知道,如果相同的行爲符合WPF – 2011-03-25 09:50:44

回答

3

Apperently有可能與一對夫婦的屬性要做到這一點,在控制屬性,您添加DesignerSerializationVisibilityAttribute:http://msdn.microsoft.com/en-us/library/system.componentmodel.designerserializationvisibilityattribute.aspx,你設置爲內容:http://msdn.microsoft.com/en-us/library/system.componentmodel.designerserializationvisibility.aspx

我羅布同意,雖然具有一個財產,委託這是一個更好的做法,這是怎麼回事,並回答我的問題,我怎麼這樣做:)

2

如果您在父級用戶控件上創建了一個屬性,然後只需將其委派給子用戶控件的屬性,那麼您應該看到設計師能夠趕上您。

public class CustomerEditor 
{ 
    public DateTime? Birthday 
    { 
     get 
     { 
      return birthdayPicker.Date; 

這有額外的獎勵,你是(略)保護您的客戶端代碼(設計器生成的東西)從父用戶控制的具體實施細則。例如,如果將父控件的某個父控件的子控件從日期選擇器更改爲文本框,則只需更改已添加到父控件的屬性,而不必更新10-20使用此用戶控件的表單。

public class CustomerEditor 
{ 
    public DateTime? Birthday 
    { 
     get 
     { 
      //probably tryparse but you get the idea 
      return DateTime.Parse(birthdayPickerTextBox.Text); 
+0

你好,這就是我過去做過的。儘管我的同事嘗試了這一點,但我不能說爲什麼設計師會這樣做。我仍然無法真正解釋它,但我想我們會按照你的建議推進,我已經在過去做過了:) – 2011-03-25 10:36:53

+0

如果我想公開所有包含的控件屬性,該怎麼辦?這意味着我需要封裝很多屬性。 – Pedro77 2013-12-31 15:01:02

相關問題