Domanda

Sono totalmente confuso da questi 3 termini, quando usare quale? Qual è la relazione e sono figli dei quali controlli?

È corretto dire che questo è l'albero:

ItemsControl> ItemsPresenter> ItemsPanel

È stato utile?

Soluzione

ItemsControl è concettualmente un controllo che gli elementi case. Provate a pensare semplicemente di questo controllo come un supporto per zero o più oggetti.

ItemsPresenter è un po 'più difficile da spiegare, ma questo fa parte del modello ItemsControl che definirà in cui gli oggetti sono collocati all'interno di esso. modello del tuo ItemsControl può essere tutto quello che vuoi, dire una griglia con alcune belle immagini che lo circondano, all'interno di questo modello, si dovrebbe posizionare il ItemsPresenter dove mai volete che i vostri articoli per essere, dicono proprio nel bel mezzo della griglia. (Questo esempio è preso da msdn e semplificata 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 degli articoli nel tuo ItemsControl. Quindi, se volete che i vostri articoli che avete aggiunto alla tua ItemsControl alla visualizzazione in modo horizotal, quindi yor pannello di oggetti potrebbe essere semplicemente uno StackPanel con il suo orientamento insieme di proprietà a orizzontale.

Tutto questo ha senso?

Altri suggerimenti

Credo 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 Classe

 <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.

Quindi, 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top