1. Написать класс-реестр, который по имени тега определяет класс компонента.
2. Написать базовый класс компонента, который умеет читать своё XML описание, выделять из него прописанные атрибуты (типа цвета, текста и т.д.), а также находить и создавать вложенные компоненты, если они есть. Для определения, какой класс нужно использовать для создания компонента, и нужен реестр.
3. Отнаследовать от базового класса классы для поддерживаемых тобой компонентов. Они должны брать свои атрибуты (которые выделил базовый класс), а потом создавать и настраивать соответствующий элемент управления. Также они должны предоставлять способ подписаться на события, на которые ты хочешь реагировать, типа изменения поля ввода, клика по кнопке и т.д. И, разумеется, они должны быть прописаны в реестре компонентов, чтобы их можно было вкладывать друг в друга.
Работы вагон, а толку будет немного, но для тренировки можно попробовать.