У дизайнера нет проблем с отображением абстрактного элемента управления в конструкторе. Проблема в том, что у вашего элемента управления есть абстрактный базовый класс.
Допустим, у вас есть абстрактный BaseControl
в качестве базового класса для MyControl
. Затем, когда вы пытаетесь увидеть BaseControl
в конструкторе, это не проблема, но дизайнер не может показать MyControl
.
Проблема заключается в том, что когда вы открываете MyControl
в режиме конструктора, дизайнер пытается создать экземпляр базового класса, чтобы показать его в конструкторе, но поскольку базовый класс является абстрактным, он не может создать экземпляр и не может нагрузка.
В качестве варианта решения проблемы вы можете создать неабстрактный базовый класс, производный от базового элемента управления для режима отладки. Тогда дизайнер может показать MyControl
.
Примечание: Использование #if DEBUG
просто для того, чтобы избавиться от промежуточной неабстрактной базы при построении для RELEASE
. Если вас это не волнует, вам не нужны эти директивы, и вы можете просто создать промежуточную неабстрактную базу и использовать ее.
namespace SampleWinApp
{
#if DEBUG
public partial class MyControl : NonAbstractBase
#else
public partial class MyControl : BaseControl
#endif
{
public MyControl()
{
InitializeComponent();
}
}
#if DEBUG
public class NonAbstractBase : BaseControl { }
#endif
}
А вот мое резюме BaseControl
:
namespace SampleWinApp
{
public abstract partial class BaseControl : UserControl
{
public BaseControl()
{
InitializeComponent();
}
}
}