ItemsControl
è concettualmente un controllo che ospita oggetti. Prova a pensare semplicemente a questo controllo come titolare per zero o più oggetti.
ItemsPresenter
è un po 'più difficile da spiegare, ma questo fa parte del modello ItemsControl
che definirà dove gli elementi sono collocati al suo interno. Il modello di ItemsControl può essere qualsiasi cosa tu voglia, ad esempio una griglia con alcune belle immagini intorno a esso, all'interno di questo modello, si posizionerà il ItemsPresenter
dove vuoi che siano i tuoi articoli, ad esempio nel mezzo della griglia. (Questo esempio è preso da msdn e semplificato per facilitare la lettura)
<Style TargetType="HeaderedItemsControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type HeaderedItemsControl}">
<Grid>
<Rectangle Stroke="Black" Fill="Red"/>
<ItemsPresenter Margin="2,0,0,0"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Il ItemsPanel
è il pannello (o contenitore) che controlla il layout elementi nel ItemsControl. Quindi, se vuoi che gli elementi che hai aggiunto a ItemsControl vengano visualizzati in modo orizzonatale, il pannello degli elementi potrebbe semplicemente essere uno StackPanel con la sua proprietà Orientation impostata su Horizontal.
Tutto questo ha senso?
Se potessi dare un esempio di tutti e 3 in uso .. sarà grande. L'esempio msdn di cui mi sono imbattuto prima non è poi così bello (cioè fa schifo) Quindi penso che itemspresenter stia spostando il ControlTemplate che può contenere un ItemsPanel per contenere più elementi all'interno di ControlTemplate? – bcm
Questa è una domanda concettuale o hai problemi a provare a creare il tuo ItemsControl? – Mark
concettuale, ma vorrei solo capirlo bene. – bcm