Я могу использовать ItemTemplate в ItemsControl для рендеринга элементов в определенном формате. Однако, если одним из элементов в 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 определен, каждый элемент в коллекции отображается как экземпляр шаблона. Однако в этом случае отображается следующее: синий прямоугольник, за которым следует TextBox, за которым следует синий прямоугольник, за которым следует красный прямоугольник.
Я предполагаю, что это предназначено поведение, и чтобы разработчики могли добавлять специальные одноразовые элементы управления. Например, я могу использовать это, чтобы добавить кнопку в ComboBox, которая очищает выбор, или я могу поместить TextBox в ListBox, который фильтрует коллекцию, указанную в ItemsSource. Мне бы очень хотелось услышать, что у кого-то есть официальный ответ на это поведение, потому что я нашел это противоречивым для использования ItemTemplate. – Drew
Отличный вопрос и отличный ответ от Энтони, спасибо, ребята. – Golvellius