wpf itemscontrol

listbox itemtemplate wpf



¿Qué hace exactamente Panel.IsItemsHost? (2)

Consulte http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.isitemshost(v=vs.90).aspx

Básicamente, lo que dice esta publicación es que si reemplaza la plantilla de control de un ListBox y desea un nuevo diseño, establezca IsItemsHost = true en algún panel, por ejemplo, un StackPanel. Entonces, cualquier elemento en el ListBox se agregará automáticamente como elementos secundarios del StackPanel. Si la orientación de ListBox es Horizontal, el ListBox será horizontal.

La otra forma es establecer la propiedad ItemsPanel del ListBox en una ItemsTemplate y en esa plantilla tiene un StackPanel. En este caso, los elementos de ListBox se agregarán a los elementos secundarios de StackPanel igual que en el primer caso. Sin embargo, no necesita establecer IsItemsHost = true, no tendrá absolutamente ningún efecto. Esto se hace por usted por el hecho de que está configurando la propiedad ItemsPanel.

No puedo encontrar ninguna buena documentación para la propiedad adjunta de Panel.IstItemsHost. Veo muchos ejemplos de personas que lo configuran en la plantilla ItemsContainer para un ItemsControl, pero la documentación no registrada en MSDN no explica por qué o qué ventajas confiere la propiedad de configuración. He creado muchos contenedores que NO configuran esta propiedad, pero que aún no han notado ningún efecto perjudicial.


Digamos que tengo un ItemsControl. Quiero usar un panel personalizado que ingrese y saque elementos mientras se desplaza; se llama SwoopPanel. Ahora, ¿cómo le digo a ItemsControl que use mi SwoopPanel para contener las plantillas que crea?

La forma más rápida es configurar el Panel de elementos en ItemsControl:

<ItemsControl.ItemsPanel> <ItemsPanelTemplate> <lol:SwoopPanel /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel>

Sin embargo, a veces eso no funciona para ti. Tal vez desee personalizar cómo se presenta SwoopPanel en la interfaz de usuario, y la única forma de evitar esto es cambiar la plantilla de control de ItemsControl. Ahora puede agregar su SwoopPanel directamente a la plantilla de control y, usando la propiedad, márquelo como ItemsHost para que ItemsControl coloque todos los elementos con plantilla que crea.

<Style TargetType="ItemsControl"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ItemsControl"> <Border CornerRadius="5"> <ScrollViewer VerticalScrollBarVisibility="Hidden"> <lol:SwoopPanel IsItemsHost="True"/> </ScrollViewer> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>

¿Tienes que hacerlo de una forma u otra? No. ¿Es una más ventajosa que la otra? Bueno, la segunda forma te permite un mayor control de la IU, la primera forma es más fácil. Elige, realmente. Nunca lo hice personalmente de la segunda manera, pero creo que podría haber un par de lugares donde podría ser útil.