Frage

Ich habe vor kurzem eine Usercontrol , die eine ziemlich lange gedauert, weil ich mit benutzerdefinierten Abhängigkeitseigenschaften arbeiten musste und so weiter ...

Wie auch immer, es war nur ein Haufen von drei Kontrollen. TextBox, Popup mit hierarchischem Baum

Jetzt erkannte ich, ich könnte wahrscheinlich ein Control nur schreiben. Daher, was der Vorteil der Verwendung von Usercontrol

War es hilfreich?

Lösung

Es gibt drei Fälle hier zu berücksichtigen: Usercontrol, Control und benutzerdefinierte Kontrolle. (Ich vermute, ein Datatemplate bedarf keine Erklärung)

benutzerdefinierte Kontrolle ist etwas, das Sie zur Verfügung stellen, wenn Sie die Basisfunktionalität einer neuen UI-Komponente erstellen. Es gibt verschiedene Vor-und Nachteile für diese, aber zum Beispiel, wenn Sie benutzerdefiniertes Auswahlverhalten eines Items wollen, könnten Sie am besten tun, indem Subklassen Selector oder Multiselector (der WPFToolkit Datagrid tut dies). Auch, wenn Sie ein Objekt wollen, die ein neues DependencyProperty enthalten würde, werden Sie in den meisten Fällen ableiten von Control.

Das wpf Prinzip hier enthalten ist das „lookless“ Steuerparadigma, oder „sicher sein, jemand Templating Ihre Kontrolle zu erwarten ist, oder zumindest ist es schön in Ihrem eigenen Vorlage Szenario machen verhalten“. Custom Controls wird in der Regel mit Wiederverwertbarkeit im Auge, oft als Teile Rahmen dlls erstellt.

Control ist im Wesentlichen eine Beschreibung eines Ersatz visuellen Struktur und kann entweder explizit auf FrameworkElements eingestellt werden, oder als Teil eines Stils. Dies ist die Option, die Sie zielen darauf ab sollen, wenn Ihr Ziel ist es in erster Linie um eine Anwendung zu machen und mit ihm getan werden. Sie können mit einem Control visuell fast alles tun, wenn Sie in der Lage sind die Bindungen und Trigger zu bekommen (und der mögliche enthält Stil selbst) recht. All dies kann erklärt werden als eine Ressource eines wiederverwendet wird, Ihre Anwendung ein gemeinsames „Thema“ zu geben.

Usercontrol ist eine in sich geschlossene Verbundsteuerung, mit Teilen einzeln bearbeitet werden im Designer, und ist am besten verwendet, wenn Sie benötigen, um Ihre Komponenten zu sehen und sie in dem Designer zu verwalten. Ein Control, auf der anderen Seite, wird nicht seine Komponenten für die Manipulation im Designer aussetzen (obwohl es sichtbar ist). Sie legen in der Regel ein Benutzersteuerelement für eine Kundendetails-Seite oder einen Warenpräsentations-Browser oder jeden Fall, wenn Sie nicht wollen, eine ausgewachsene Steuerung zu schaffen, wollen aber Detailansicht mit vollem Designer-Support.

Ein Sonderfall ist hier, wenn Sie die MVVM Muster. Viele große MVVM-Implementierungen verwenden Benutzersteuerelemente wie Views, und Control und Stile als Ressourcen, die von diesen Ansichten verwendet. MVVM Praxis minimiert auch die Notwendigkeit für eine individuelle Steuerung, und hat viele andere Vorteile.

(Für weitere Informationen über MVVM, unter vielen anderen, Google für Josh Smith, Sacha Barber und Karl Shifflett fantastischen Artikel)

Andere Tipps

Wenn Sie eine eigene Abhängigkeitseigenschaften hinzufügen, dann werden Sie Ihre eigene Klasse benötigen, auf denen sie zu definieren.

Wie Sie eine Vorlage auf die Klasse anwenden möchten, wird diese individuelle Klasse von Control abzuleiten (wie UserControl der Fall ist).

Der Hauptvorteil Ihre eigene Control abgeleitete Klasse des Schreibens ist, dass es seine Vorlage für andere Nutzungsszenarien neu definiert hat, kann entweder von Ihnen innerhalb der App oder durch andere Benutzer des Typs.

Es gibt sehr wenig Aufwand die UserControl Klasse in Verwendung. In der Tat, wenn man es in Reflector.NET anschauen, werden Sie sehen, dass es kaum einen Code hat. In erster Linie UserControl definiert nur die Metadaten auf einigen bestehenden Abhängigkeitseigenschaften (wie den Standardwert von FocusableProperty false machen.)

Wenn Sie die Vorlage der Steuerung sofort neu zu definieren müssen, können Sie es als UserControl jetzt verlassen und später bei Bedarf ändern.

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