ItemsControl без ItemsPresenter (Silverlight)
Я создал элемент управления, унаследовавший ItemsControl, и элемент управления, который я создал, не имеет ItemsPresenter для своего шаблона. Вместо этого у меня есть Сетка. Я хочу сделать такой список:
(Пункт 1)
(GridSplitter)
(Пункт 2)
(GridSplitter)
(Пункт 3)
Поскольку я должен вставить свой собственный GridSplitter между Предметами, таким образом я не могу использовать ItemsPresenter и позволить ему заполнять пользовательский интерфейс для меня.
Я переопределяю метод OnItemsChanged(), чтобы написать свою логику добавления / удаления GridSplitter. Однако мне все еще нужно использовать класс ItemContainerGenerator для генерации ItemTemplate для моих Предметов.
Но когда в моем шаблоне элемента управления нет ItemsPresenter, ItemContainerGenerator, похоже, не работает. Когда я использую его для создания элемента в первый раз, он возвращает ContentPresenter с DataTemplate. Затем я вставил его в сетку, которая у меня есть. Тем не менее, на экране ничего не отображается. Если я добавлю другой элемент, он выдаст ошибку, когда я вставлю в сетку сообщение о том, что элемент уже находится в визуальном дереве. По этой причине я думаю, что ItemContainerGenerator не может работать без ItemsPresenter.
Поэтому я попытался заменить свою сетку на ItemsPresenter. На этот раз он использует свою логику подчеркивания для создания элементов и отображает то, что должен. Однако это не то, что я хочу.
Причина, по которой я хочу использовать ItemContainerGenerator, заключается в том, что мне нужно создать элементы пользовательского интерфейса из ItemTemplate, который я определил в Xaml.
Есть ли способ, которым я могу создать пользовательский интерфейс с ItemTemplate моего контроля над элементами?
1 ответ
Если у вас уже возникают проблемы с прослушиванием OnItemsChanged и ручным добавлением контента в сетку, вам просто нужно создать UserControl вместо использования ItemTemplate, а затем вставить UserControl с его DataContext, установленным в соответствующий объект, в ваш Сетка и не беспокойтесь о наследовании от ItemsControl.