【问题标题】:Visual Inheritance, Design-time support for extended custom controls视觉继承,对扩展自定义控件的设计时支持
【发布时间】:2012-10-11 18:12:49
【问题描述】:

我正在扩展我自己的自定义控件,它扩展了 UserControl 类。

我可以在扩展类的设计器中看到所有元素都很好,但是扩展自定义控件的所有属性都显示为禁用,并且当用鼠标选择其元素时会出现“锁定”图标。

我该如何解决这个问题?我希望能够从设计器中修改这些属性。

编辑:自定义控件的定义,从 UserControl 扩展而来。

namespace Wizard
{
    [Designer(typeof(Wizard.StepDesigner))]
    [DefaultProperty("TitlePanel, NavigationPanel")]
    public partial class Step : UserControl
    {
         public Step()
         {
            InitializeComponent();
         }

         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
         public Title TitlePanel
         {
              get
              {
                    return this.title1;
              }
              set
              {
                   this.title1 = value;
              }
          }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public Panel ContentPanel
        {
            get
            {
                 return this.contentPanel;
            }
        }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public Navigation NavigationPanel
        { 
             get
             {
                 return this.navigation1;
             }
         }
     }

     internal class StepDesigner : ParentControlDesigner
     {
         public override void Initialize(System.ComponentModel.IComponent component)
         {
            base.Initialize(component);

            if (this.Control is Step)
            {
                 Step control = (Step)this.Control;
                 this.EnableDesignMode(control.TitlePanel, "TitlePanel");
                 this.EnableDesignMode(control.ContentPanel, "ContentPanel");
                 this.EnableDesignMode(control.NavigationPanel, "NavigationPanel");
             }
         }  
     }
 }

【问题讨论】:

  • 它们的修饰符是受保护的还是公开的?
  • 请发布其中一两个属性的属性定义。
  • 我修改了问题。
  • 一旦控件的无参数构造函数运行后,这些属性中的每一个的支持字段是否都有值?另外,如果您希望Content 对其进行序列化,为什么还要为Title 设置setter?此类属性通常是只读的(就像您的其他 Content 属性一样)
  • 我刚刚设法解决了我的问题。正如@HenkHolterman 指出的那样,他们的修饰符是私人的,但是当我回答时我误解了他的问题。更正有关“标题”字段的备注。

标签: c# .net winforms


【解决方案1】:

正如我在 cmets 中已经指出的那样,属性的修饰符都设置为 private 并将它们更改为 protected 并重建解决方案修复了“问题”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2013-05-25
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多