Sono in grado di utilizzare un ItemTemplate all'interno di ItemsControl per eseguire il rendering di elementi in un formato specifico. Tuttavia, se uno degli elementi all'interno di ItemsControl sembra essere, ad esempio, un controllo TextBox, viene eseguito il rendering di TextBox anziché un'istanza di ItemsTemplate. Da quello che posso dire, questo è vero per qualsiasi FrameworkElement. Questo comportamento è previsto per un oggetto ItemsControl o sto facendo qualcosa in modo errato?Perché ItemsControl non utilizza My ItemTemplate?
Un esempio:
<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>
mi aspettavo questo per visualizzare quattro rettangoli blu. Ho pensato che ogni volta che un ItemTemplate è stato definito ogni elemento della collezione è reso come un'istanza del modello. Tuttavia, in questo caso viene visualizzato il seguente: un rettangolo blu seguito da un riquadro di testo seguito da un rettangolo blu seguito da un rettangolo rosso.
Sto indovinando che questo è inteso comportamento, ed è destinato a consentire agli sviluppatori la possibilità di aggiungere speciali controlli di utilizzo monouso. Ad esempio, potrei usare questo per aggiungere un pulsante a un ComboBox che cancella la selezione, oppure potrei mettere un TextBox in un ListBox che filtra la raccolta specificata da ItemsSource. Mi piacerebbe sapere che qualcuno ha una risposta ufficiale per questo comportamento perché l'ho trovato contro-intuitivo all'uso di un ItemTemplate. – Drew
Ottima domanda e ottima risposta di Anthony, grazie ragazzi. – Golvellius