ItemsControl, ItemsPanel y ItemsPresenter(Silverlight, XAML)
(2)
Creo que esto explica bastante cómo Silverlight hace las cosas: ItemsPanelTemplate Class: especifica el panel que crea ItemsPresenter para el diseño de los elementos de 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 />
....
Básicamente, ItemPresenter (especificado en la plantilla) se reemplazará con lo que se especifique en ItemsPanelTemplate.
Por lo tanto, la plantilla se puede ampliar para incluir un encabezado y todos los elementos secundarios se colocarán debajo de este encabezado:
<Grid> <TextBlock Text="Header"/> <ItemsPresenter /> </Grid>
Estoy completamente confundido por estos 3 términos, ¿cuándo usarlos? ¿Cuál es la relación y son niños de qué controles?
¿Es correcto decir que este es el árbol?
ItemsControl> ItemsPresenter> ItemsPanel
ItemsControl
es conceptualmente un control que aloja elementos. 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 él. La plantilla de ItemsConControl puede ser lo que quieras, por ejemplo, una cuadrícula con algunas imágenes bonitas a su alrededor, dentro de esta plantilla, colocarás el ItemsPresenter
en el lugar que desees, por ejemplo, en el centro de la cuadrícula. (este ejemplo está tomado 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>
The ItemsPanel
es el panel (o contenedor) que controla el diseño de los elementos 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?