Question

Je suis tout à fait confus par ces 3 termes, quand utiliser qui? Quelle est la relation et ce sont des enfants dont les contrôles?

Est-il exact de dire que c'est l'arbre:

ItemsControl> ItemsPresenter> ItemsPanel

Était-ce utile?

La solution

ItemsControl est conceptuellement un contrôle que les articles maisons. Essayez de penser simplement de ce contrôle en tant que support pour zéro ou plusieurs objets.

ItemsPresenter est un peu plus difficile à expliquer, mais cela fait partie du modèle de ItemsControl qui définira où les éléments sont placés à l'intérieur. Votre modèle de ItemsControl peut être tout ce que vous voulez, dire une grille avec quelques jolies images autour, à l'intérieur de ce modèle, vous placez le ItemsPresenter où vous voulez que vos articles soient, dire au milieu de votre grille. (Cet exemple est tiré de et simplifiée msdn pour faciliter la lecture)

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

Le ItemsPanel est le panneau (ou conteneur) qui contrôle la mise en page des articles dans votre ItemsControl. Donc, si vous voulez que vos articles que vous avez ajouté à votre ItemsControl à l'affichage d'une manière horizotal, puis yor panneau éléments pourrait simplement être un StackPanel avec son ensemble de propriétés d'orientation à l'horizontale.

Tout cela a du sens?

Autres conseils

Je pense que cette jolie explique bien comment les choses sont faites par Silverlight: ItemsPanelTemplate Classe: Indique le panneau que le ItemsPresenter crée pour la mise en page des éléments d'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 />
              ....

En fait, le ItemPresenter (spécifié dans le modèle) sera remplacé par tout ce qui est spécifié dans le ItemsPanelTemplate.

Ainsi, le modèle peut être étendu pour inclure un en-tête et tout enfant sera placé sous cet en-tête:

<Grid> <TextBlock Text="Header"/>   <ItemsPresenter /> </Grid>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top