Frage

ich bin hier Art fest. Ich verwende eine Dragndrop-Bibliothek, die die gezogenen UIElements über XamlWriter.Save () serialisiert.

Jetzt versuche ich, erstreckt Grid einige Instanzen einer Klasse zu Dragndrop. im Konstruktor i drücken einige Elemente in der visuellen Struktur. der Konstruktor aufgerufen wird, wenn das Objekt deserialisiert wird und die Elemente wieder hinzugefügt (diese und immer wieder, je nachdem, wie oft ich Dragndrop). leider Children.Count sagt mir, es gibt keine Kind-Elemente sind, wenn ich den Wert aus dem Konstruktor abrufen. wenn ich es von außen (durch myGrid.Children.Count) abrufen es gibt mir die höhere (unerwünschte) Menge.

gibt es eine andere Funktion i die Visuals zu initialisieren verwenden sollte? oder jede andere Art und Weise, diese Duplikate zu verhindern?

Dank und Jubel

Keine korrekte Lösung

Andere Tipps

hat eine Weile gedauert, aber ich glaube, eine Lösung gefunden zu haben.
Jetzt bin ich in der Lage bereits eine Basisklasse zu schaffen, müssen die visuellen Elemente alle Unterklassen enthält. und sie sind parsable über XamlWriter / Reader ohne Duplikate. puh.

1) erstrecken Usercontrol (Dont Add-> Usercontrol aber Add-> Klasse und vererben manuell)
2) stellen den Standard InitializeControl (); in den Konstruktor
3) implementieren InitializeControl () und legt das Layouten, Kind Zugabe und was auch immer dort
4) xamlwrite / xamlread / inherit wie verrückt

hoffen, dass es für jemanden nützlich sein wird und dass ich die unvorhergesehene havent beaufsichtigt ..

- edit: natürlich. es wird Duplikate sein, aber wir können nicht sie sehen. nachdem der XamlReader ist durch dort die UIElements erstellt von meinem InitializeComponent () und die, die immer XAML-analysiert danach sind. Verweise in dem Code betrachten die Code erstellt Kontrollen, die nicht angezeigt werden: /

Seufzer.

ein bei weitem nicht perfekt Weg, um dieses ist ein Schalter in einem initialisierten Event-Handler zu setzen, etwa so: if(HasContent)
Initialize();
else
Reinitialize();
Multiinitialize();

wo die Initialize (), um die UIElements auf die visuelle Struktur hinzufügen würde, findet die Reinitialize () nur die richtigen Referenzen (von control = FindName("controlName")) und die Multiinitialze () erstellt die Event-Handler und was auf dem Weg throug die XamlReader wird sonst verloren.

na ja, jetzt können Sie die benutzerdefinierte geerbt Usercontrol in XAML instanziiert, aber es gibt keinen einfachen Weg, um Satz Attribute. Das ist, weil das Attribut Einstellung geschieht vor dem initialisierten-Ereignisse und es gibt Nullpointerexceptions erwarten. Sie könnten umgehen, dass mit Bindungen denke ich.

Aber es muss ein einfacher Weg sein. lass es mich wissen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top