Qui ci sono tre casi da considerare: UserControl, ControlTemplate e custom Control. (Immagino che un DataTemplate non abbia bisogno di spiegazioni)
A controllo personalizzato è qualcosa che viene fornito quando si crea la funzionalità di base di un nuovo componente dell'interfaccia utente. Esistono diversi vantaggi e svantaggi per questo, ma, ad esempio, se si desidera un comportamento di selezione personalizzato di un oggetto ItemsControl, è meglio farlo sottoclasse Selector o MultiSelector (lo fa il wGrftoolkit DataGrid). Inoltre, se si desidera un oggetto che conterrebbe una nuova proprietà di dipendenza, nella maggior parte dei casi deriverà da Controllo.
Il principio di wpf qui contenuto è il paradigma del controllo "senza look", ovvero "assicurati di aspettarti che qualcuno stia tentando di modellare il tuo controllo, o almeno di farlo comportare bene nello scenario del tuo modello". I controlli personalizzati vengono generalmente creati tenendo presente la riutilizzabilità, spesso come parti di DLL di framework.
A ControlTemplate è essenzialmente una descrizione di un albero visivo sostitutivo e può essere impostato esplicitamente su FrameworkElements o come parte di uno stile. Questa è l'opzione a cui devi mirare quando il tuo obiettivo è principalmente quello di creare un'applicazione e di farlo. Puoi fare praticamente qualsiasi cosa con un ControlTemplate visivamente, se sei in grado di ottenere i binding e i trigger (e il possibile contenente Style stesso) correttamente. Tutto questo può essere dichiarato come una risorsa riutilizzata, per dare alla tua applicazione un "tema" comune.
Un UserControl è un controllo composito self-contained, con parti individualmente modificabili nella finestra di progettazione, ed è utilizzato al meglio, se hai bisogno di vedere i componenti e gestirli nella finestra di progettazione.Un ControlTemplate, d'altra parte, non espone i suoi componenti per la manipolazione nel designer (anche se sarà visibile). Generalmente si crea un UserControl per una pagina dei dettagli del cliente, o un browser di visualizzazione del prodotto, o qualsiasi altro caso in cui non si desidera creare un controllo completo, ma si desidera una vista dettagliata con il supporto completo del progettista.
Un caso particolare qui è se si utilizza il modello MVVM. Molte grandi implementazioni MVVM utilizzano UserControls come visualizzazioni e ControlTemplates e Styles come risorse utilizzate da tali visualizzazioni. La pratica MVVM minimizza anche la necessità di un controllo personalizzato e ha molti altri vantaggi.
(Per maggiori informazioni su MVVM, tra molti altri, Google per Josh Smith, Sacha Barber e articoli fantastici di Karl Shifflett)
ho capito che la differenza principale è che posso fornire nuove proprietà di dipendenza per tale controllo. Ma penso che tutte le altre modifiche potrebbero essere impostate in Stile, Trigger o Template. O? –