Как наследовать UserControl от абстрактного UserControl (без суеты дизайнера)? - PullRequest
2 голосов
/ 03 января 2012

У меня есть элемент управления (mySubControl), который наследуется от UserControl (myAbstractControl), который является абстрактным. Теперь в конструкторе mySubControl всегда есть ошибка, говорящая: не могу создать экземпляр myAbstractControl.

Я думаю, что VS2010 Designer пытается использовать конструктор myAbstractControl.

Как я могу предотвратить его появление в результате ошибки?

Все это кажется немного жутким.

Посмотрим. У меня есть абстрактный BaseClass.

[TypeDescriptionProvider(typeof(ConcreteControlProvider))]
public abstract class AbstractControl : UserControl

Имеет конструктор, содержащий код, который должен использоваться любым наследующим классом.

public AbstractControl(SuperVar myImportantSuperVar)
{
    myPrivateSuperVar = myImportantSuperVar;
    this.Loaded += new System.Windows.RoutedEventHandler(TreatMySuperVar);
}

Кроме того, ему нужен пустой конструктор для соответствия наследованию UserControl

public AbstractControl() {/*You won't really use me*/}

Теперь, когда есть наследующий класс (написанный злыми коллегами).

public partial class ConcreteControl: AbstractControl

Ему нужен собственный конструктор, и он не использует мой очень важный метод лечения SuperVar.

public ConcreteControl(SomeOtherVar notMyVar)
{
    // Do some useless things here
}

Так что теперь есть две проблемы. Тем не менее, я не знаю, почему мой дизайнер портит, и, кроме того, мои конструктор абстрактных классов, переменные и методы игнорируются.

Я уже пытался использовать TypeDescriptionProviders (переопределяя GetReflectionType и CreateInstance), как отмечено в связанной записи, но это не имело значения.

Так как я могу решить эту проблему?

...