2017-06-27 4 views
1

Nach dem Einlesen in XamlWriter und XamlReader habe ich mich gefragt, ob es möglich ist, zur Laufzeit eine beliebige .xaml-Datei zu laden, den Objektbaum zu bearbeiten und dann wieder zu verwenden..XAML-Datei laden und Objektbaum zur Laufzeit bearbeiten

Was ich versuche zu erstellen, ist eine Art Showcase-Anwendung für alle verfügbaren Stile eines Projekts. Ich habe TemplateViews für mehrere ControlTypes (wie ButtonTemplateView.xaml, ListboxTemplateView.xaml ...), deren Style-Eigenschaft an ein Viewmodel gebunden ist, die zur Laufzeit für jeden Fit-Stil dynamisch konstruiert und dann zur Hauptansicht hinzugefügt werden. Aber ich möchte auch alle Stile für die CustomControls des Projekts anzeigen, die ich gerade über Activator.CreatInstance mit dem TargetType des Stils, und dann das Objekt zur Hauptansicht hinzufügen.

Nun können sagen, wenn ein Custom MyCustomTextBox auf einem TextBox basiert, kann ich nur die TextBoxTemplateView.xaml laden, schalten alle < TextBox ... /> zu einem < MyCustomTextBox .../> und dann zu meiner Hauptansicht hinzufügen?
Wenn ja, wie? Kann ich es in eine Schnur verwandeln und die Wörter einfach ersetzen und sie dann wieder in etwas Brauchbares verwandeln? Oder muss ich das UserControl-Objekt bearbeiten, das ich bekomme, wenn ich XamlReader.Load verwende? Oder etwas anderes?

Ich hoffe, das ist keine doppelte Frage (zumindest habe ich nichts dergleichen gefunden) und danke für jede Hilfe im Voraus.

+0

Warum versuchst du es nicht einfach? – Clemens

+0

Wenn ich wüsste wie, würde ich ... Warum glaubst du, dass ich hierher gekommen bin? –

+1

"Schalten Sie jedes auf ein ", das vor dem Laden des XAML wie ein einfacher String-Ersatz aussieht. Hast du überhaupt etwas probiert? – Clemens

Antwort

1

Sie könnten entweder alle Vorkommen <TextBox> durch <local:MyCustomTextBox> in der string ersetzen, die Sie an die XamlReader.Load Methode übergeben. Dies ist wahrscheinlich der einfachste Weg, denn dann wird die XamlReader die MyCustomTextBox Elemente für Sie erstellen.

würde Die andere Option durch die <TextBox> Elemente im UserControl iterieren, die von den XamlReader.Load Verfahren und ersetzen diese durch MyCustomTextBox Elemente zurückgeführt wird. Wie dies geschieht, hängt davon ab, wo sich die Steuerelemente im Elementbaum von UserControl befinden.

+0

Vielen Dank! Ich habe den ersten Ansatz versucht, das Problem ist, wie kann ich die .xaml-Datei in eine Zeichenfolge verwandeln? Ich habe versucht, es mit 'GetManifestResourceStream' zu tun, aber dann müsste ich die Datei als eingebettete Ressource markieren, die es unbrauchbar macht. Gibt es eine Möglichkeit, eine Zeichenfolge aus meiner Datei zu entfernen und sie trotzdem im Projekt zu verwenden? –

+0

Was ist die Build-Aktion der Datei? – mm8

+0

Seite, es ist ein UserControl. –

Verwandte Themen