In pratica i controlli personalizzati sono qualcosa che si implementa a livello di codice mentre è possibile utilizzare XAML per i controlli utente. I controlli personalizzati estendono una delle classi della base di controllo WPF e forniscono funzionalità aggiuntive tramite il codice, pertanto tutta la logica e la rappresentazione aggiunte devono essere implementate all'interno del codice.
Un controllo utente è tecnicamente un normale controllo del contenuto che è possibile estendere in alcune parti del codice, ma di solito viene esteso inserendo altri controlli al suo interno. Così come Kent ha menzionato un UserControl è un'aggregazione di altri controlli. Ciò limita notevolmente ciò che è possibile fare con un controllo utente. È più facile da usare ma più limitato di un controllo personalizzato completo.
Questi controlli hanno una piccola differenza dal punto di vista del runtime. Quando si crea un'applicazione e si inserisce un UserControl, l'albero di controllo avrà al suo interno un modello UserControl concreto. Quindi, se consideriamo un esempio lame di un pulsante specializzato. Se si utilizzava un controllo utente, aggiungerebbe un pulsante all'interno <UserControl>
dell'elemento. Quando si utilizza un controllo personalizzato, è probabile che si derivi il controllo stesso da un pulsante molto probabilmente. La differenza sarebbe visibile nell'albero logico.
Mentre il controllo personalizzato fornirebbe un albero logico simile a
UserControl darebbe un albero logico di
Quindi, alla fine, UserControl è solo un normale ContentControl che puoi estendere un po 'e per il quale puoi predefinire il contenuto. Il controllo personalizzato offre una maggiore flessibilità al prezzo della facilità di implementazione in quanto devi fare tutta la logica e l'interazione nel codice invece di avere il vantaggio di XAML.
Anche se dopo tutto questo, non penso che ci sia molta differenza nei modelli di Visual Studio. Molto probabilmente il controllo personalizzato di Visual Studio crea solo un progetto con un controllo personalizzato vuoto mentre il progetto Controllo utente è un progetto con un controllo utente vuoto. Successivamente puoi aggiungere qualsiasi tipo di elemento al progetto.
Aggiornare
E la mia opinione su quando usare il controllo personalizzato e il controllo utente è che se riesci a fare qualcosa con un controllo utente e l'elemento di controllo extra nella struttura logica non ti disturba, usa un controllo utente in quanto sono molto più facili da creare e mantenere. Utilizzare un controllo personalizzato solo se si ha un motivo per non utilizzare un controllo utente.