2010-09-16 25 views

Respuesta

32

ItemsControl es conceptualmente un control que alberga artículos. Intente simplemente pensar en este control como titular de 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á dónde se colocan los elementos dentro de ella. La plantilla de ItemsControl puede ser lo que quieras, por ejemplo, una cuadrícula con algunas imágenes bonitas, dentro de esta plantilla, colocarías el ItemsPresenter donde quieras que tus artículos estén, digamos justo en el medio de tu grilla. (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 la disposición de los artículos en su ItemsControl. Por lo tanto, si desea que los elementos que ha agregado a su ItemsControl se muestren de manera horizotal, su panel de elementos simplemente podría ser un StackPanel con su propiedad de Orientación establecida en Horizontal.

¿Todo esto tiene sentido?

+0

Si pudiera dar un ejemplo de los 3 en uso .. será grande. El ejemplo de msdn que encontré antes no es tan bueno (es decir, es una mierda). ¿De modo que creo que el presentador de elementos está desplazando la plantilla de control que puede contener un panel de elementos para contener más elementos dentro de ControlTemplate? – bcm

+0

¿es esta una pregunta conceptual o tiene problemas para tratar de crear su propio ItemsControl? – Mark

+0

conceptual, pero me gustaría entenderlo bien. – bcm

5

creo que esto explica más o menos cómo las cosas se hacen por Silverlight: ItemsPanelTemplate Clase: Especifica el panel que el ItemsPresenter crea para la disposición de los elementos de 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 /> 
       .... 

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