2010-09-16 10 views

risposta

32

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?

+0

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

+0

Questa è una domanda concettuale o hai problemi a provare a creare il tuo ItemsControl? – Mark

+0

concettuale, ma vorrei solo capirlo bene. – bcm

5

Penso che questo spiega più o meno come le cose sono fatte da Silverlight: ItemsPanelTemplate Classe: Specifica il pannello che l'ItemsPresenter crea per la disposizione degli elementi di un ItemsControl. ItemsPanelTemplate Class

<Style TargetType="local:myItemsControl"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical"/> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="local:myItemsControl"> 
       .... 
       <ItemsPresenter /> 
       .... 

In sostanza, l'ItemPresenter (specificato nel modello) sarà sostituito con tutto ciò che è specificato nel ItemsPanelTemplate.

Così, il modello può essere esteso per includere un colpo di testa e tutto il bambino sarà posto sotto questa intestazione:

<Grid> <TextBlock Text="Header"/> <ItemsPresenter /> </Grid> 
Problemi correlati