我创建了一个继承 ItemsControl 的控件,而我制作的控件没有用于其模板的 ItemsPresenter。相反,我有一个网格。我想做一个这样的列表:
(第 1 项)
(网格分割器)
(第 2 项)
(网格分割器)
(第 3 项)
因为我必须在 Items 之间插入我自己的 GridSplitter,因此我不能使用 ItemsPresenter 并让它为我填充 UI。
我重写了 OnItemsChanged() 方法,因此我可以编写添加/删除 GridSplitter 的逻辑。但是,我仍然需要使用 ItemContainerGenerator 类来为我的 Items 生成 ItemTemplate。
但是当我的控件模板中没有 ItemsPresenter 时,ItemContainerGenerator 似乎不起作用。当我第一次使用它来生成项目时,它会返回一个带有 DataTemplate 的 ContentPresenter。然后我将它插入到我拥有的网格中。但是,屏幕上没有显示任何项目。如果我添加另一个项目,当我插入网格时会抛出一个错误,说该项目已经在可视化树中。这就是我认为没有 ItemsPresenter 的 ItemContainerGenerator 无法工作的原因。
所以我尝试用 ItemsPresenter 替换我的 Grid。这一次,它使用它的下划线逻辑来创建项目,并显示它应该显示的内容。然而,这不是我想要的。
我想使用 ItemContainerGenerator 的原因是我需要从我在 Xaml 中定义的 ItemTemplate 创建 UI 元素。
有没有办法可以使用我的项目控件的 ItemTemplate 生成 UI?