Puedo usar una plantilla de elemento dentro de ItemsControl para representar elementos en un formato específico. Sin embargo, si uno de los elementos dentro de ItemsControl resulta ser, por ejemplo, un TextBox, ese TextBox se representa en lugar de una instancia de ItemsTemplate. Por lo que puedo decir, esto es cierto para cualquier FrameworkElement. ¿Es este el comportamiento previsto para un ItemsControl, o estoy haciendo algo incorrectamente?¿Por qué ItemsControl no utiliza My ItemTemplate?
Un ejemplo:
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="5">
<Rectangle Fill="Blue" Height="20" Width="20" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.Items>
<sys:Object />
<TextBox />
<sys:Object />
<Rectangle Fill="Red" Height="20" Width="20" />
</ItemsControl.Items>
</ItemsControl>
me esperaba esto para visualizar cuatro rectángulos azules. Pensé que cada vez que se definiera una plantilla de elemento, cada elemento de la colección se representaría como una instancia de la plantilla. Sin embargo, en este caso se representa lo siguiente: un rectángulo azul seguido de un cuadro de texto seguido de un rectángulo azul seguido de un rectángulo rojo.
supongo que esto está destinado comportamiento, y es destinado a permitir a los desarrolladores la posibilidad de agregar controles especiales de uso único. Por ejemplo, podría usar esto para agregar un Botón a un ComboBox que borre la selección, o podría poner un TextBox en un ListBox que filtre la colección especificada por ItemsSource. Me encantaría escuchar que alguien tiene alguna respuesta oficial para este comportamiento porque me pareció contraintuitivo el uso de una plantilla de elemento. – Drew
Gran pregunta y excelente respuesta de Anthony, gracias chicos. – Golvellius