在用户控件中公开控件

3
冒着被嘲笑和违反某些设计规则的风险,我有以下问题。
我们创建了一些用户控件,通过使用属性在这些用户控件上公开了控件。然后我们在设计器中更改这些问题以进一步调整用户控件(针对特定的表单),但是当我们保存时,设计器不会写入任何内容,而且确实未保存更改。
当我们将更改硬编码到设计器文件中时,更改会得到保存,并且如果我们手动通过设计器更改属性并保存,则所有先前的更改都会被丢弃。
我们是否违反了某些模式/设计规则?这是一个错误吗?有没有更好的方法来做到这一点?
问候,
F.B. ten Kate

抱歉,这是在winforms中,我不知道同样的行为是否适用于WPF。 - F.B. ten Kate
2个回答

3

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); 

是的,我以前也是这样做的。我的同事尝试过这种方法,但我无法解释为什么设计师会这样行事。我仍然无法真正解释它,但我想我们会按照你建议的方式前进,我以前也这样做过 :) - F.B. ten Kate
如果我想公开所有包含的控件属性怎么办?这意味着我需要封装很多属性。 - Pedro77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接