Pregunta

Estoy totalmente confundido por estos 3 términos, cuándo usar cuál? ¿Cuál es la relación y que son hijos de los cuales los controles?

¿Es correcto decir que este es el árbol:

ItemsControl> ItemsPresenter> ItemsPanel

¿Fue útil?

Solución

ItemsControl es conceptualmente un control que alberga artículos. Tratar de simplemente pensar en este control como un soporte para cero o más objetos.

ItemsPresenter es un poco más difícil de explicar, pero esto es parte de la plantilla ItemsControl que definirá donde los elementos se colocan dentro de ella. plantilla de su ItemsControl puede ser lo que desee, por ejemplo una rejilla con unas fotos bonitas a su alrededor, dentro de esta plantilla, colocaría la ItemsPresenter donde cada vez que desea que sus artículos sean, dicen justo en el medio de su red. (Este ejemplo se toma de MSDN y simplificado para facilitar la lectura)

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

El ItemsPanel es el panel (o contenedor) que controla el diseño de los artículos en su ItemsControl. Así que si usted quiere que sus elementos que ha añadido a su ItemsControl a la pantalla de una manera horizotal, entonces yor panel de objetos podría ser simplemente un StackPanel con su propiedad Orientación conjunto a la horizontal.

Todo esto tiene sentido?

Otros consejos

Creo que esto explica más o menos cómo las cosas se hacen por Silverlight: ItemsPanelTemplate Clase: Especifica el Grupo Especial que el ItemsPresenter crea para la disposición de los elementos de ItemsControl. ItemsPanelTemplate Clase

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

Básicamente, el ItemPresenter (especificado en la plantilla) será reemplazado con lo que se especifica en el ItemsPanelTemplate.

Así, la plantilla se puede ampliar para incluir una cabecera y todo niño será colocado bajo este encabezado:

<Grid> <TextBlock Text="Header"/>   <ItemsPresenter /> </Grid>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top