2011-03-25 58 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

相关问题