Создаю контрол TabPage на основе старого:
public partial class TabControl2 : TabControl
{
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public new TabPageCollection TabPages { get; } // скрыли родную коллекцию страниц
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public List<TabPage> UserPages { get; set; } = new List<TabPage>(); // новая коллекция страниц
}
Мне требуется внедрить новую коллекцию страниц, чтобы в дизайнере можно было добавлять/удалять страницы и устанавливать у них нужные свойства(public List - класс TabPage будет расширен, в него будут добавлены новые свойства). При текущем объявлении свойство видимо в дизайнере, функционирует - но не полностью(код из файла форма.Designer.cs):
this.tabPage1 = new System.Windows.Forms.TabPage();
//
// tabPage1
//
this.tabPage1.Location = new System.Drawing.Point(0, 0);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Size = new System.Drawing.Size(200, 100);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "tabPage1";
private System.Windows.Forms.TabPage tabPage1;
Как видно - страница создалась, но не вызвался метод Add свойства Control родительского объекта. Как правильно объявить новое свойство UserPages, чтобы в файле форма.Designer.cs код генерировался полностью?
Подведу краткий итог исследования вопроса и обсуждения в комментариях:
То что вы хотите реализовать можно, но придется руками писать дизайнер, который сможет подхватить студия.
Для этого понадобится создать наследника ParentControlDesigner, оригинал можно подсмотреть с помощью DotPeek (другими до internal классов добраться не удалось) в System.Windows.Forms.Design.TabControlDesigner (System.Design.dll)
Когда все будет готово, повесить на кастомный контрол DesignerAttribute
[Designer("<namespace>.CustomTabControlDesigner")]
class CustomTabControl : TabConrol { ... }
Непосредственно реализация дизайнера и контрола останется за рамками данного вопроса, я не слишком силен в данной магии, чтобы понятно и кратко изложить только необходимое, но если кто-то наберется энтузиазма и осилит, я с удовольствием почитаю. (может когда-нибудь и сам соберусь, но это не точно)
Замечания по поводу специализированной коллекции для вложенных табов, остаются в силе, однако с учетом изучения кода штатного дизайнера, это не позволит получить сколь-нибудь существенное облегчение работы, так как создание стандартных TabPage
"прибито гвоздями", и для изменения данного поведения дизайнера придется его переписывать.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хотелось бы узнать, есть ли способ использовать библиотеку LuaJIT в программе, написанной на C# по аналогии с C/C++Т
Мы используем связку (клиент WPF) -> EF 62
Сегодня столкнулась вот с такой проблемойПочему If и тернарная функция не равны
У меня есть в WPF область Grid, где я задаю множество точек в PointCollection и добавляю это в PolylineПолучаю, соответственно, ломаную кривую