Вы не можете изменить тип класса при создании экземпляра, но вы можете создать экземпляр нового объекта.
Альтернатива 1:
[Это не то, что я сам попробовал, но я думаю, что вы сможете выполнить его, если дадите имя контролю. Тогда программно вы можете сделать это:
<UserControl x:Class="someclass" x:Name="myControl" ...
В коде сделать:
this.myControl = new SomeOtherUserControl();
Альтернатива 2:
Создайте интерфейс, обеспечивающий поведение, которое вы хотите изменить во время выполнения в вашем элементе управления.
И ваш пользовательский элемент управления содержит экземпляр, который реализует это поведение. Затем вы можете изменить экземпляр во время выполнения.
Что-то вроде:
interface ISpecialControlBehaviour
{
...
}
class DefaultBehaviour: ISpecialControlBehaviour
{
}
class Behaviour2 : ISpecialControlBehaviour
{
}
Ваш пользовательский контроль:
class MyUserControl
{
// use this property to change behaviour at runtime.
ISpecialControlBehaviour Behaviour {get;set;}
MyUserControl()
{
Behaviour = DefaultBehaviour();
}
}
Если не ясно, дайте мне знать, и я расширю пример кода; -)