Quali sono i motivi validi per utilizzare ContentPresenter al di fuori del modello?

3

Mi sono imbattuto in un articolo di Den Delimarsky su Che cos'è un ContentPresenter? che dice:

In WPF there is an element called ContentPresenter, that is often used inside control templates, as well as inside the root application markup.

Non capisco la parte "inside the root application markup", perché pensavo che ContentPresenter potesse essere usato solo all'interno di un ControlTemplate.

Il ruolo di ContentPresenter è abbastanza chiaro se utilizzato in un oggetto ControlTemplate, ma quali sono i motivi validi per utilizzare ContentPresenter al di fuori del markup di un modello?

    
posta Dreamer 19.10.2011 - 03:05
fonte

2 risposte

1

Non ci sono ragioni. Dovresti usare ContentControl piuttosto che ContentPresenter al di fuori di un modello.

    
risposta data 21.10.2011 - 12:23
fonte
1

(Questa sembra una risposta abbastanza obsoleta.)

Ci sono usi validi di ContentPresenter ovunque. Il mio uso principale è quello di inviare la vista dal tipo di runtime del contenuto.

Lasciatemi spiegare: immagina di avere una proprietà di tipo Animal nella tua VM, quindi vorresti visualizzarla da qualche parte nell'interfaccia utente. Se hai un'interfaccia utente singola per qualsiasi tipo di Animal , puoi inserirla in UserControl e utilizzare un costrutto come

<AnimalControl DataContext="{Binding Animal}"/>

Tuttavia, immagina di avere un sacco di diversi animali, ad esempio Toad s, Human s e Unicorn s. Quindi ti piacerebbe distinguere tra loro (forse hai sviluppato diversi UserControl s per loro). Lo fai nel modo seguente:

<ContentPresenter Content="{Binding Animal}"/>

Per utilizzare la vista corretta, devi inserire il seguente DataTemplate s nell'ambito:

<DataTemplate TargetType="{x:Type vm:Unicorn}">
    <UnicornControl/>
</DataTemplate>

ecc. Di solito le persone ottengono tale funzionalità usando TemplateSelector / ContentTemplateSelector , ma anche questo modo è valido e sembra essere più semplice (puoi mescolare gli ambiti dei modelli con stili personalizzati, a la CSS).

    
risposta data 03.04.2014 - 23:03
fonte

Leggi altre domande sui tag