TL; DR;
Wie kann ich eine Copy-Paste-Funktion zu einer komplexen Eigenschaft mit mehreren Werten hinzufügen, mit der ich den Eigenschaftswert aus einem Benutzersteuerelement kopieren und zur Entwurfszeit in ein anderes Steuerelement einfügen kann?Wie kopiert man einen komplexen Eigenschaftswert von einem Benutzersteuerelement in ein anderes als Entwurfszeit?
Die lange Geschichte
ich ein Benutzersteuer erstellt haben (StylableControl
), die eine komplexe Eigenschaft Style
genannt hat.
Diese Eigenschaft enthält eine Instanz einer Klasse namens StylableControlStyles
, die mehrere Instanzen einer Klasse Style
, wo jeder hält Werte wie BackColor
, ForeColor
, Image
, Gradient
(eine andere Klasse die ich angelegt habe) usw. genannt enthält.
Ich habe auch einen benutzerdefinierten Steuerelement-Designer erstellt, um die Bearbeitungsstileigenschaft für das Benutzersteuerelement zu ermöglichen. Es zeigt ein Formular, in dem jede Stilklasse in der Stileigenschaft leicht bearbeitet werden kann.
Jetzt möchte ich den Nutzern dieser Steuerung eine einfache Möglichkeit, den gesamten Inhalt des Style
Eigentum von einer Instanz der Benutzersteuerung an eine andere Instanz, zur Entwurfszeit zu kopieren.
Ich könnte natürlich, überschreiben die ToString()
Methode des StylableControlStyles
Objekt eine String-Darstellung zu erzeugen, die alle gespeicherten Daten in diesem Objekt kapseln wird, aber das wäre eine hugh String und natürlich schaffen würde eine Menge Arbeit benötigen Parsing es im Klassenkonverter (derzeit verwende ich nur eine ExpandableObjectConverter
).
Ich möchte das möglichst vermeiden.
Sind Sie Vielleicht einfach nach einer Möglichkeit suchen, eine Objekthierarchie tief zu klonen oder tief zu kopieren? Wenn ja, gibt es bereits [mehrere Antworten] (http://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-of-an-object-in-net-c-spezifisch) [hier auf SO] (http://stackoverflow.com/questions/78536/deep-cloning-objects) – jcb
@jcb Eigentlich wird der colning Teil schon geschrieben, das ist nicht mein Problem. Ich bin auf der Suche nach einer Möglichkeit, Design-Time-Unterstützung für Copy-Paste-Werte zwischen Steuerelementen in einem Formular bereitzustellen. So etwas wie ein Smart-Tag-Befehl, mit dem der Benutzer eine andere Instanz des Benutzersteuerelements auswählen und dessen Stil in den Stil der aktuellen Instanz kopieren kann. –
@ZoharPeled, wenn Sie bereits ein benutzerdefiniertes Steuerelement-Designer-Formular haben, fügen Sie beispielsweise die Schaltflächen "Stil kopieren" und "Kopierten Stil hinzufügen" hinzu. Der kopierte Stil kann in einem Puffer gespeichert werden (vielleicht sogar in der Zwischenablage. Wenn es ein für Menschen lesbares Format ist, können Benutzer kopierten Wert in .designer einfügen.cs-Datei direkt) – ASh