Могу ли я программно изменить класс, связанный с пользовательским элементом управления XAML - PullRequest
0 голосов
/ 23 января 2011

В этом пользовательском контроле XAML, если у меня изначально

<UserControl x:Class="someclass"

Могу ли я программно изменить класс? Где и как?

Ответы [ 3 ]

2 голосов
/ 23 января 2011

Возможно, в моем ответе нет ответа, но другой вариант переключения элементов управления - поместить их в элемент управления содержимым.а чем в коде можно сказать:

ContentControl.Content = new MyUserControl();
2 голосов
/ 23 января 2011

Нет, так как это директива времени компиляции. msdn

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

1 голос
/ 23 января 2011

Вы не можете изменить тип класса при создании экземпляра, но вы можете создать экземпляр нового объекта.

Альтернатива 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();
   }
}

Если не ясно, дайте мне знать, и я расширю пример кода; -)

...