Hier sind drei Fälle zu berücksichtigen: UserControl, ControlTemplate und benutzerdefinierte Control. (Ich vermute, braucht eine Datatemplate keine Erklärung)
A individuelle Steuerung ist etwas, das Sie zur Verfügung stellen, wenn Sie die Basisfunktionalität eines neuen UI-Komponente erstellen. Es gibt verschiedene Vor- und Nachteile für dieses Beispiel. Wenn Sie jedoch ein benutzerdefiniertes Auswahlverhalten für ein ItemsControl wünschen, können Sie dies am besten tun, indem Sie Selector oder MultiSelector ableiten (das tut wfftoolkit DataGrid). Wenn Sie ein Objekt wünschen, das eine neue DependencyProperty enthalten würde, werden Sie in den meisten Fällen von Control abgeleitet. Das WPF-Prinzip, das hier enthalten ist, ist das "lookless" -Steuerparadigma, oder "stellen Sie sicher, dass Sie jemanden erwarten, der Ihr Controlboard templatiert, oder sorgen Sie dafür, dass es sich in Ihrem eigenen Template-Szenario gut verhält". Benutzerdefinierte Steuerelemente werden in der Regel unter Berücksichtigung von Wiederverwendbarkeit erstellt, oft als Teile von Framework-DLLs.
A ControlTemplate ist im Wesentlichen eine Beschreibung eines visuellen Ersatzbaums und kann entweder explizit auf FrameworkElements oder als Teil eines Styles festgelegt werden. Dies ist die Option, die Sie anstreben sollten, wenn Ihr Ziel in erster Linie darin besteht, eine Bewerbung zu machen und damit fertig zu werden. Sie können fast alles mit einer ControlTemplate visuell machen, wenn Sie die Bindungen und Trigger (und die mögliche Aufnahme von Style selbst) in Ordnung bringen können. All dies kann als eine wiederverwendete Ressource deklariert werden, um Ihrer Anwendung ein gemeinsames "Thema" zu geben.
A UserControl ist ein in sich geschlossenes Composite-Steuerelement, dessen Teile im Designer einzeln editierbar sind. Es wird am besten verwendet, wenn Sie Ihre Komponenten sehen und im Designer verwalten müssen.Ein ControlTemplate hingegen wird seine Komponenten im Designer nicht für Manipulationen zugänglich machen (obwohl es sichtbar sein wird). In der Regel erstellen Sie ein Benutzersteuerelement für eine Kundendetailseite oder einen Produktanzeigebrowser oder einen Fall, in dem Sie keine vollständige Kontrolle erstellen, sondern eine detaillierte Ansicht mit vollständiger Designerunterstützung wünschen.
Ein besonderer Fall ist hier, wenn Sie das Muster MVVM verwenden. Viele große MVVM-Implementierungen verwenden UserControls als Ansichten und ControlTemplates und Stile als Ressourcen, die von diesen Ansichten verwendet werden. Die MVVM-Praxis minimiert zudem die Notwendigkeit eines benutzerdefinierten Controls und bietet viele weitere Vorteile.
(Für weitere Informationen über MVVM, unter vielen anderen, Google für Josh Smith, Sacha Barber und Karl Shifflett fantastischen Artikel)
ich es verstehe, dass der primäre Unterschied ist, dass ich für das Steuerelement neue Abhängigkeitseigenschaften bieten kann. Aber ich denke, dass alle anderen Änderungen in Style, Triggers oder Template gesetzt werden können. Oder? –