заняло некоторое время, но я, кажется, нашел решение.
Теперь я могу создать базовый класс, уже содержащий визуальные элементы, необходимые всем подклассам. и они могут быть проанализированы через XamlWriter / Reader без дубликатов. гмм.
1) расширить UserControl (не Add-> UserControl, а Add-> Class и наследовать вручную)
2) поставить стандартный InitializeControl (); в конструктор
3) реализовать InitializeControl () и поместить в него макет, дочернее добавление и все, что угодно
4) xamlwrite / xamlread / Наследовать как сумасшедший
надеюсь, что это будет кому-то полезно, и что я не наблюдал за непредвиденным ..
-
редактировать: конечно.
будут дубликаты, но мы их не увидим.
после того, как XamlReader завершен, существуют элементы UIE, созданные моим InitializeComponent (), и те, которые после этого анализируются на xaml. любые ссылки в коде относятся к созданным кодом элементам управления, которые НЕ отображаются: /
Вздох.
Один далеко не идеальный способ обойти это - поместить переключатель в инициализированный обработчик событий, например так:
if(HasContent)<br>
Initialize();<br>
else<br>
Reinitialize();<br>
Multiinitialize();
где Initialize () добавит UIElements в визуальное дерево, Reinitialize () просто находит правильные ссылки (control = FindName("controlName")
), а Multiinitialze () воссоздает обработчики событий и что еще теряется на пути через XamlReader.
Что ж, теперь вы можете создать экземпляр пользовательского унаследованного UserControl в xaml, но нет простого способа установить атрибуты. Это связано с тем, что установка атрибутов происходит до события Initialized и ожидают исключения NullPointerException. я думаю, вы могли бы обойти это с привязками.
но должен быть более легкий путь. пожалуйста, дайте мне знать!