我能够使用一个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