У меня есть особое требование для создания пользовательского элемента управления с определенными общими функциями. Для этого элемента управления у меня также есть требование разрешить другим разработчикам добавлять элементы управления в режиме конструктора для создания определенных пользовательских интерфейсов. Для этого я создал пользовательский элемент управления, добавив (образец) метку и кнопку. Я также добавил панель, чтобы разрешить добавление дополнительных элементов управления в определенной области элемента управления.
Затем я сделал класс видимым в режиме конструктора, добавив разметку [Designer] и [ControlDesigner]. Это дает желаемый эффект добавления пользовательского элемента управления с некоторым фиксированным содержимым и добавления дополнительных элементов управления на страницу. Проблема в том, что пользователь может переместить панель в режиме разработки, и VisualStudio запутается, создав круговую ссылку. Я что-то упустил? Можно ли отключить изменение размера / расположения панели, даже если мне нужен режим дизайна?
ПРИМЕЧАНИЕ. Я также пытался использовать пользовательский элемент управления в режиме разработки, но добавленные элементы управления продолжают исчезать за фиксированными элементами управления в пользовательском элементе управления.
Код и примеры приведены ниже. Любые предложения / исправления приветствуются.

Над изображением пользовательского элемента управления с панелью

Выше приведена форма, включающая пользовательский элемент управления и добавление настраиваемой кнопки на панель. Обратите внимание, что при перетаскивании панели включается, при касании в файле form.designer.cs создается круговая ссылка, и проект становится неустойчиво.
Наконец, ниже приведен класс для пользовательского управления
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Windows.Forms.Design;
namespace wfcLib
{
[DesignerAttribute(typeof(MyControlDesigner))]
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public partial class ucInput : UserControl
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel InternalPanel
{
get { return pnlContent; }
set { pnlContent = value; }
}
public ucInput()
{
InitializeComponent();
}
}
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
public class MyControlDesigner : System.Windows.Forms.Design.ControlDesigner
{
public override void Initialize(IComponent c)
{
base.Initialize(c);
ucInput ctl = (ucInput)c;
EnableDesignMode(ctl.InternalPanel, "InternalPanel");
}
}
}