2

我创建了一个继承 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?

4

1 回答 1

0

如果您已经遇到了聆听 OnItemsChanged 并手动将内容添加到网格的麻烦,您应该只创建一个 UserControl 而不是使用 ItemTemplate,然后将 UserControl 的 DataContext 设置为适用的对象插入到您的Grid 而不必担心从 ItemsControl 继承。

于 2011-05-31T19:11:17.693 回答