a pris un certain temps, mais il me semble avoir trouvé une solution.
maintenant je suis capable de créer une classe de base contenant déjà les éléments visuels dont toutes les sous-classes ont besoin. et ils sont analysables via XamlWriter/Reader sans doublons. ouf.
1) étendre UserControl (dont Add-> UserControl mais Add-> Class et hériter manuellement)
2) mettre le standard InitializeControl(); dans le constructeur
3) mettre en œuvre InitializeControl() et mettre le layouting, l'enfant en ajoutant et tout là-dedans
4) xamlwrite/xamlread/inherit comme un fou
espérons qu'il sera utile à quelqu'un et que je havent supervisé la imprévisible ..
- modifier: of course. il y aura des doublons mais nous ne pouvons pas les voir. une fois le XamlReader terminé, il y a les UIElements créés par mon InitializeComponent() ET ceux qui reçoivent xaml-parsed après cela. toutes les références dans le code concernent les contrôles créés par le code qui ne sont PAS affichés:/
sigh.
un loin de façon parfaite autour est de mettre un interrupteur dans un gestionnaire d'événements Initialisé, comme ceci: if(HasContent)
Initialize();
else
Reinitialize();
Multiinitialize();
où le initialize() ajouterait les UIElements à l'arbre visuel, le réinitialise() juste trouve la références à droite (par control = FindName("controlName")
) et le Multiinitialze() recrée les gestionnaires d'événements et quoi d'autre se perd sur le chemin à travers le XamlReader.
bien, maintenant vous pouvez instancier le UserControl hérité personnalisé dans xaml mais il n'y a pas de moyen facile de définir des attributs. En effet, la définition des attributs se produit avant l'événement Initialized et NullPointerExceptions sont en attente. vous pouvez contourner cela avec des reliures je suppose.
mais il doit être un moyen plus facile. s'il vous plaît, faites-moi savoir!