Erweitern der Benutzersteuerelemente in WPF

8

Ich habe ein User Control erstellt, das wie üblich aus einem XAML-Teil und einem Code-Behind-Teil besteht. Jetzt muss ich ein anderes Benutzersteuerelement erstellen, das einige der Funktionen des ersteren teilt, aber das Aussehen und die Funktionen des Code-Behinds hat.

Meine erste Idee war, eine Schnittstelle zu schaffen, um die gemeinsamen Funktionalitäten der beiden Arten von Kontrollen zu sammeln. Ist das der richtige Weg? Und wie würde ich die verschiedenen XAML-Teile verwalten, die ich haben sollte? Jeder Rat ist willkommen.

    
Tilvia 20.11.2011, 16:16
quelle

3 Antworten

9

Ich möchte einen weiteren Beitrag hinzufügen, von dem ich denke, dass er für andere nützlich sein könnte, die sich in meiner Situation befinden.

Eine andere mögliche Lösung, die meiner Meinung nach geeignet ist, wenn die Steuerelemente, die Sie erstellen werden, nicht besonders komplex sind, besteht darin, ein Basis-Benutzersteuerelement zu erstellen, das die gemeinsamen Merkmale enthält, die Sie freigeben möchten: Ein solches Steuerelement wird vollständig geschrieben in C #. Dies ermöglicht tatsächlich die Vererbung in Benutzersteuerelementen, die sowohl aus XAML als auch aus Code bestehen. In der XAML des geerbten Steuerelements statt

%Vor%

Sie werden

haben %Vor%

und dann in dem Code hinter Ihnen müssen Sie auch Folgendes angeben:

%Vor%

Hoffe, das hilft.

    
Tilvia 23.11.2011, 11:00
quelle
2

Benutzersteuerelemente eignen sich nicht gut für die Vererbung in WPF. Sie können einige Hacks ausführen, damit es funktioniert, aber insgesamt ist es wahrscheinlich besser, stattdessen ein benutzerdefiniertes Steuerelement zu verwenden. Es ist einfacher, verschiedene XAML für geerbte Steuerelemente mit dieser Technik anzugeben. Die einfachste Möglichkeit, mit einem benutzerdefinierten Steuerelement zu beginnen, besteht darin, Ihrem Projekt vom Typ "Benutzerdefiniertes Steuerelement (WPF)" ein neues Element hinzuzufügen. Es fügt das Steuerelement hinzu, und das XAML wird für Sie zu Designs / generic.xaml hinzugefügt.

Um von diesem Steuerelement zu erben, besteht der einfachste Weg darin, ein weiteres neues benutzerdefiniertes Steuerelement (WPF) hinzuzufügen und anschließend den Code zu ändern, der anstelle von Control von Ihrem übergeordneten Steuerelement geerbt wird.

    
Bill Reiss 20.11.2011 16:29
quelle
2

Es gibt mehrere Möglichkeiten, die Teile aufzuteilen, um die Arbeit zu erleichtern.

MVVM, wie in einem Kommentar erwähnt, beruht auf Datenbindung, um die Eingabesteuerelemente von der Logik zu trennen. Durch Festlegen der entsprechenden Klasse, die INotifyPropertyChanged in den DataContext Ihres Steuerelements implementiert, können Sie das Verhalten ändern. Ihre DataContext-Klasse oder ViewModel könnte Sichtbarkeitseigenschaften implementieren, um verschiedene Teile der Eingabe anzuzeigen und auszublenden, wenn die Unterschiede zwischen den Verwendungen nicht zu groß sind.

Eine andere Möglichkeit, Funktionalität zu zerlegen, ist Aggregation. Siehe StackOverflow 269496

Sie könnten kleinere Steuerelemente erstellen, die allgemeine Funktionen implementieren, und dann größere Steuerelemente für spezielle Zwecke erstellen, indem Sie die kleineren Steuerelemente kombinieren (d. h. aggregieren), um ein größeres Steuerelement zu erstellen. Die Aggregation funktioniert sowohl für den Code-Behind-Ansatz als auch für den Data-Binding-Ansatz.

    
Doug Ferguson 20.11.2011 17:42
quelle

Tags und Links