没有ItemsPresenter的ItemsControl(Silverlight)

时间:2011-05-31 18:03:50

标签: templates silverlight contentpresenter itemspresenter

我创建了一个继承ItemsControl的控件,以及我创建的控件 没有ItemsPresenter作为其模板。相反,我有一个网格。 我想制作一个这样的清单:


(第1项)


(GridSplitter)


(第2项)


(GridSplitter)


(第3项)


因为我必须在Items之间插入我自己的GridSplitter,所以我无法使用 ItemsPresenter让它为我填充UI。

我重写了OnItemsChanged()方法,所以我可以编写添加/删除的逻辑 GridSplitter。但是,我仍然需要使用ItemContainerGenerator类 为我的Items生成ItemTemplate。

但是当我的控件模板中没有ItemsPresenter时,ItemContainerGenerator 似乎不起作用。当我第一次使用它来生成项目时,它会返回 带有DataTemplate的ContentPresenter。然后我将它插入到我拥有的网格中。 但是,屏幕上没有显示任何项目。如果我添加另一个项目,它将抛出 插入网格时出错该项目已在可视树中。 这就是我认为ItemContainerGenerator在没有ItemsPresenter的情况下无法工作的原因。

所以我尝试用ItemsPresenter替换我的Grid。这一次,它使用它 强调创建项目的逻辑,并显示它应该是什么。但是,这不是我想要的。

我想使用ItemContainerGenerator的原因是我需要创建 我在Xaml中定义的ItemTemplate中的UI元素。

有没有办法可以使用我控制项目的ItemTemplate生成UI?

1 个答案:

答案 0 :(得分:0)

如果您已经遇到了监听OnItemsChanged并手动将内容添加到网格的麻烦,那么您应该创建一个UserControl而不是使用ItemTemplate,然后将UserControl的DataContext设置为适用的插入对象进入你的网格而不用担心从ItemsControl中获取内容。