Анализ ссылочного источника показывает, что метод IsItemItsOwnContainerOverride
класса ItemsControl имеет такую реализацию:
protected virtual bool IsItemItsOwnContainerOverride(object item)
{
return (item is UIElement);
}
Так что если вы передадитеколлекция элементов UIElements для ItemsSource элемента ItemsControl, эти элементы используются непосредственно как контейнеры элементов, без обычного переноса внутри ContentPresenter
.Следовательно, ItemTemplate
вообще не применяется.
Итак, ответ на вопрос
Как мне создать ItemTemplate с дополнительным XAML?
is: Совсем нет, если ItemsSource является коллекцией UIElements.
Вместо этого следует следовать основной идее класса ItemsControl и назначить коллекцию объектов элементов данных свойству ItemsSource.,Затем выберите соответствующие элементы управления пользовательским интерфейсом с помощью DataTemplates, в свойстве которых DataType
установлены типы различных элементов данных.
Или вы создаете производный ItemsControl, который переопределяет метод IsItemItsOwnContainerOverride
:
public class MyItemsControl : ItemsControl
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return false;
}
}