2009-04-30 21 views
135

Sto appena arrivando alla velocità su WPF e vorrei creare un controllo WPF riutilizzabile.Qual è la differenza tra una libreria di controlli utente e una libreria di controlli personalizzati?

Quando guardo le opzioni per la creazione di progetti in Visual Studio, vedo "Libreria di controllo utente WPF" e "Libreria di controlli personalizzati WPF". Non mi è chiaro quale sia la differenza tra loro e le mie ricerche su Google non hanno trovato spiegazioni decenti.

Mi piacerebbe capire le differenze tra loro e idealmente vedere alcuni esempi di quando utilizzare uno sull'altro.

+2

Non dimenticare di annidare il contenuto o modificare il modello di un controllo come opzioni. È possibile apportare modifiche piuttosto drastiche a un controllo in questo modo senza dover scrivere un controllo personalizzato. – MichaC

+0

Proprio quello che ha detto MichaC. La parte migliore di WPF è che i modelli di controllo esistenti possono avere un impatto enorme. È necessario richiedere i controlli personalizzati raramente. Diversamente da WinForms, anche le modifiche minori a un controllo richiedevano un nuovo controllo derivato. –

+0

Ancora utile. Avere un altro distintivo d'oro – ouflak

risposta

99

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 di 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 in genere viene esteso inserendo altri controlli al suo interno. Così come Kent ha menzionato un UserControl è un'aggregazione di altri controlli. Questo limita notevolmente ciò che si può fare con un controllo utente. È più facile da usare ma più limitato rispetto a un controllo personalizzato completo.

Questi controlli hanno una piccola differenza dal punto di vista del runtime. Quando si costruisce un'applicazione e si inserisce un UserControl, l'albero di controllo avrà all'interno un modello UserControl concreto. Quindi, se consideriamo un esempio zoppo di un pulsante specializzato. Se stavi utilizzando un controllo utente, dovresti aggiungere un pulsante all'interno dell'elemento <UserControl>. Quando si utilizza un controllo personalizzato si otterrebbe il controllo stesso da un pulsante molto probabilmente. La differenza sarebbe visibile nell'albero logico.

Mentre il controllo personalizzato fornirebbe un albero logica simile a

  • Finestra
    • CustomButton

L'UserControl darebbe un albero logica di

  • Finestra
    • CustomButtonUserControl
      • pulsante

Così, alla fine del UserControl è solo un ContentControl normale, che è possibile estendere un po 'e per il quale è possibile 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.

Nonostante tutto questo, non penso che ci sia molta differenza nei modelli di Visual Studio. Molto probabilmente il controllo personalizzato di Visual Studio crea semplicemente un progetto con un controllo personalizzato vuoto mentre il progetto Controllo utente è un progetto con un controllo utente vuoto. È possibile aggiungere successivamente qualsiasi tipo di elementi al progetto.

Aggiornamento

e la mia opinione su quando utilizzare il controllo personalizzato e il controllo dell'utente è che se si può ottenere qualcosa fatto con un controllo utente e l'elemento di controllo extra nella struttura logica non disturbarla, utilizzare un controllo utente in quanto sono molto più facili da creare e mantenere. Utilizzare un controllo personalizzato solo se si dispone di un motivo per non utilizzare un controllo utente.

+1

È possibile utilizzare un controllo personalizzato per aggregare altri controlli? –

+0

E che ne è del problema personalizzabile/templabile? –

+1

Non sai cosa intendi aggregando. Non è possibile creare un controllo personalizzato aggregando altri controlli. Tuttavia, è possibile derivare da un controllo Panel come StackPanel, Grid o Panel stesso in modo da poter implementare un contenitore di layout con un controllo personalizzato (non è sicuro se lo si può fare con un controllo utente). –

21

Un Control rappresenta alcuni comportamenti che è personalizzabile (templatable), mentre un UserControl è generalmente un'aggregazione di livello superiore del Control s che è specifico per un'applicazione.

Altre informazioni disponibili here.

+3

Questo è uno dei link che ho trovato che non spiegava molto bene le cose :). Immagino che una cosa che mi manca è ciò che significa skinnable/templatable e perché non può essere eseguito con un controllo utente. Inoltre, l'ultima frase del post collegato è "Generalmente e semplicemente parlando, i controlli personalizzati hanno maggiore flessibilità e riusabilità rispetto ai controlli utente". Se questo è vero, allora perché dovrei voler creare un controllo utente? –

Problemi correlati