Question

Je suis un peu coincé ici. J'utilise un DragNDrop-bibliothèque qui sérialise les UIElements traînés par XamlWriter.Save ().

Maintenant, je suis en train de DragNDrop certains cas, d'une classe étendant la grille. dans le constructeur i pousser certains éléments dans l'arborescence visuelle. le constructeur est appelé lorsque l'objet est désérialisé et les éléments sont ajoutés à nouveau (et encore et encore en fonction de la façon dont je DragNDrop souvent). malheureusement Children.Count me dit qu'il n'y a pas d'éléments de l'enfant si je récupérer la valeur à partir du constructeur. si je le récupérer à l'extérieur (par myGrid.Children.Count), il me donne la plus grande quantité (non désirée).

est-il une autre fonction que je devrais utiliser pour initialiser les visuels? ou tout autre moyen d'éviter ces doublons?

Merci et acclamations

Pas de solution correcte

Autres conseils

a pris un certain temps, mais je semble avoir trouvé une solution.
Maintenant, je suis en mesure de créer une classe de base contenant déjà les éléments visuels toutes les sous-classes ont besoin. et ils sont analysables par XamlWriter / lecteur sans doublons. Ouf.

1) étendre UserControl (Do not Ajouter-> UserControl mais Ajouter-> classe et Hériter manuellement)
2) mettre la norme InitializeControl (); dans le constructeur
3) mettre en œuvre InitializeControl () et mettre le layouting, l'enfant et ajouter tout là-dedans
4) xamlwrite / xamlread / inherit comme un fou

espérons qu'il sera utile à quelqu'un et que je nai pas supervisé l'imprévu ..

- edit: bien sûr. il y aura des doublons mais nous ne pouvons pas les voir. après la XamlReader est par là les UIElements créés par mon InitializeComponent () et celles qui obtiennent analysable XAML-après. toute référence dans le code considèrent les contrôles créés le code, qui ne sont PAS montrent: /

soupir.

un loin de façon parfaite autour est de mettre un interrupteur dans un gestionnaire d'événements Initialisé, comme suit: if(HasContent)
Initialize();
else
Reinitialize();
Multiinitialize();

où le initialize () ajouterait les UIElements à l'arbre visuel, le réinitialise () trouve que les bonnes références (par control = FindName("controlName")) et le Multiinitialze () reconstitue les gestionnaires d'événements et quoi d'autre se perd sur le chemin throug le XamlReader.

bien, vous pouvez maintenant instancier la coutume héritée UserControl en XAML, mais il n'y a pas moyen facile d'attributs définis. c'est parce que la définition des attributs se produit avant l'événement Initialisé et il y a NullPointerExceptions en attente. vous pouvez travailler autour de cela avec fixations je suppose.

mais il doit être un moyen plus facile. s'il vous plaît laissez-moi savoir!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top