我能夠使用一個ItemsControl內一個ItemTemplate來呈現特定格式的項目。但是,如果ItemsControl中的某個項目碰巧是一個TextBox,那麼將顯示該TextBox而不是ItemsTemplate的一個實例。從我所知道的情況來看,對於任何FrameworkElement來說都是如此。這是一個ItemsControl的預期行爲,還是我做錯了什麼?爲什麼ItemsControl不使用我的ItemTemplate?
一個例子:
<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>
我預期這個顯示四個藍色矩形。我認爲任何時候已經定義了ItemTemplate,集合中的每個項目都會呈現爲模板的一個實例。但是,在這種情況下,將呈現以下內容:藍色矩形,後面是文本框,後面是藍色矩形,後面是紅色矩形。
我猜,這是預期的行爲,並旨在讓開發人員能夠添加特殊的一次性使用控件。例如,我可能會使用它將Button添加到清除選擇的ComboBox,或者我可能會將TextBox放入ListBox中,以過濾由ItemsSource指定的集合。我很想聽到有人對此行爲有一些正式答案,因爲我發現它與ItemTemplate的使用不直觀。 – Drew 2010-10-01 21:44:01
安東尼的好問題和很好的答案,謝謝你們。 – Golvellius 2013-11-27 16:22:03