Похоже на то, что мы делаем в нашем проекте.
Существует базовый класс, который является общим:
public partial class controlItemList<TBaseItem, TBaseItemCollection> : UserControl, IUIDispatcher
where TBaseItem : new()
where TBaseItemCollection : IItemCollection<TBaseItem>
Затем для каждого использования мы определяем неуниверсальную версию (которая до сих пор не может использоваться дизайнером):
public class controlMessagesNonGenericParent : controlItemList<MailItem, MailItemCollection>
{
}
... и затем мы получили элементы управления, которые можно использовать в конструкторе:
public partial class controlMessages : controlMessagesNonGenericParent
{
...
}