Ich bin gerade dabei, einfache Anwendung mit WPF und C# (als Lernübung) zu erstellen. Ich habe bemerkt, dass ich zwei fast identische Seiten benötige (gleiche Benutzereinstellungen, dieselbe Liste, dieselben Methoden für Buttons usw.). Die Sache, die anders wird, ist Inhalt - unterschiedlicher Text, Kopfzeilen, Bilder angezeigt.
Repetitive Methoden zu vermeiden ist einfach - ich werde nur eine Art von abstrakten Basis-Seite erstellen, die diese beiden Seiten erben werden. Aber wie vermeide ich es, den gesamten XAML-Code zu wiederholen? Gibt es eine Möglichkeit, es zivilisiert zu lösen oder sollte ich es einfach kopieren und einfügen wie ein Höhlenmensch?
Vielen Dank!Wie wiederhole ich XAML?
Antwort
1. Erstellen Sie Benutzersteuerelemente und wiederverwenden
Sie müssen Ihre Fenster nicht setzen alles direkt in. Erstellen Sie stattdessen ein UserControl und legen Sie Ihre ähnlichen Steuerelemente dort. Sie können dann beispielsweise unterscheiden, indem Sie den DataContext ändern oder DependencyProperty für verschiedene Anwendungsfälle verwenden. Angenommen, Sie benennen Ihr Benutzersteuerelement MyUserControl
. Anschließend können Sie es wie folgt in Ihrem Fenster schließen ein:
<local:MyUserControl x:Name="MemberNameCanBeAccessedInCodeBehind" />
2. Wiederverwendung Code-behind
Eine Sache, die einen großen Augenöffner für mich in Bezug auf Wiederverwertbarkeit war, war die Tatsache, dass eine XAML-Datei und seine Code-Behind-Datei sind im Grunde zwei Seiten derselben Medaille. Gehen wir zurück zu MyUserControl
. In der XAML-Datei haben Sie:
<UserControl x:Class="MyUserControl" ...
Und in der Code-Behind Sie haben:
public partial class MyUserControl : UserControl
Die Sache ist die: Sie haben nicht von UserControl
zu erben! Wenn Sie einige Code-Behind-Funktionalität wie Schlüssel-Bindungen oder Event-Handler haben, können Sie sie wiederverwenden, indem Sie Ihre eigenen benutzerdefinierten Usercontrol-Klasse erstellen:
public class MyUserControlClass : UserControl
{
// Everything that you want to reuse!
}
Jetzt nur Sie UserControl
in XAML ersetzen und Code-Behind mit MyUserControlClass
und Sie kann diese Funktionalität verwenden:
<local:MyUserControlClass x:Class="MyUserControl" ...
public partial class MyUserControl : MyUserControlClass
Das XAML-Fenster zeigt möglicherweise zuerst einen Fehler, aber wenn Sie es kompilieren, funktioniert.
- 1. Wie wiederhole ich Zufallswerte?
- 2. Wie wiederhole ich eine Liste?
- 3. Wie wiederhole ich mit jquery?
- 4. Wie wiederhole ich Sprite horizontal?
- 5. Wie wiederhole ich das Muster?
- 6. Wie wiederhole ich das Geschäftsjahr?
- 7. Slick: Wie wiederhole ich unendlich?
- 8. Wie wiederhole ich eine Abfrage?
- 9. Wie wiederhole ich die Textur wie GL_REPEAT?
- 10. Wie wiederhole ich Mocha Tests/Schleife
- 11. Wie wiederhole ich bestimmte Aktionen auf Vim?
- 12. Wie wiederhole ich eine einfangende Gruppe?
- 13. Wie wiederhole ich Code von ähnlichen Aufgaben?
- 14. Wie wiederhole ich rdlc volle Seite
- 15. Wie wiederhole ich mehrere Werte von Socket
- 16. Wie wiederhole ich einen Teil eines Codes?
- 17. Wie wiederhole ich nach einer Ausnahme?
- 18. Wie wiederhole ich Element-ID in AngularJS?
- 19. Wie wiederhole ich eine Funktion mit Javascript?
- 20. Wie wiederhole ich zweimal innerhalb eines Arrays?
- 21. Wie wiederhole ich scrapy Aufgaben bei Ausfall
- 22. Python Bot Wie wiederhole ich nach Netzwerkausfall
- 23. Wie wiederhole ich dieses Array ohne Warnungen?
- 24. RxJava: Wie wiederhole ich das nächste?
- 25. cx_Oracle: Wie wiederhole ich eine Ergebnismenge?
- 26. Wie wiederhole ich über Gesichter in CGAL
- 27. Wie wiederhole ich ein Zeichen in DataGrip?
- 28. Maxima: Wie wiederhole ich die Dezimalzahl?
- 29. Wie wiederhole ich try-except Block
- 30. Wie wiederhole ich Fehler mit $ q.all
Das klingt wie eine Vorlage mit dem unterschiedlichen Steuerelement Text, Bilder usw. an Eigenschaften eines Viewmodel gebunden. –
Danke, dass du mich in die richtige Richtung gelenkt hast, Kumpel, ich werde mir das ansehen. Danke vielmals! –
... oder ein UserControl anstelle einer Vorlage; gute Antwort da unten von Benjamin. –