Please wait!
Please wait!

ALEXEYWORLD.COM

alexeyworld.com

Проблемы наследования элементов управления в WPF

наследование в WPF

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

Ничего особенного не делал. Создал свой элемент управления (назовем его "X") и прописал необходимый мне функционал. Затем я создаю следующий элемент управления, наследованный от класса X. И тут появляется ошибка: cannot be the root of a XAML file because it was defined using XAML. На нее пришлось потратить некоторое количество времени и сил. С трудом удалось разобраться.

Оказывается, визуальное наследование в WPF не поддерживается! Первое время у меня был ступор: как же дальше быть без наследования элементов управлления? Но выход здесь есть. Правда не совсем удобный. Для этого, наш базовый класс нужно определить полностью в коде без использования XAML.

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

public class UserControlInCode : UserControl
{
    protected override void OnContentChanged(object oldContent, object newContent)
    {
        base.OnContentChanged(oldContent, newContent); 
 
        StackPanel panel = new StackPanel();       
 
        ((IAddChild)newContent).AddChild(panel);
 
    }
} 

В этом коде мы можем добавлять необходимые нам элементы управления без использования XAML.

опубликовано: 19.11.2013, 18:09 | просмотров: 6555 |


dezmound (20.06.2015, 21:09)

Огромное человеческое СПАСИБО! )

alone880 (03.12.2013, 15:22)

ограмадное СПАСИБО