我创建了一个继承了ItemsControl的控件,而我创建的控件没有一个ItemsPresenter作为模板。相反,我有一个网格。我想列一张这样的清单:
(项目1)
(GridSplitter)
(项目2)
(GridSplitter)
(项目3)
因为我必须在项之间插入我自己的GridSplitter,所以我不能使用ItemsPresenter,让它为我填充UI。
我重写了OnItemsChanged()方法,以便编写添加/删除GridSplitter的逻辑。但是,我仍然需要使用ItemContainerGenerator类为我的项目生成ItemTemplate。
但是,当我的控制模板中没有ItemsPresenter时,ItemContainerGenerator似乎无法工作。当我第一次使用它生成项目时,它会返回一个带有ContentPresenter的DataTemplate。然后我把它插入到我拥有的网格中。但是,屏幕上没有显示任何项目。如果我添加了另一项,当我插入到网格中时,它会抛出一个错误,说明该项已经在可视树中。这就是我认为ItemContainerGenerator没有ItemsPresenter就不能工作的原因。
因此,我试图用ItemsPresenter替换网格。这一次,它使用下划线逻辑来创建项,并显示它应该显示的内容。不过,这不是我想要的。
我想使用ItemContainerGenerator的原因是我需要从我在Xaml中定义的ItemTemplate创建UI元素。
是否有一种方法可以使用我对项目的控制的ItemTemplate生成UI?
发布于 2011-05-31 19:11:17
如果您已经经历了侦听OnItemsChanged和将内容手动添加到网格的麻烦,那么您应该创建一个UserControl而不是使用ItemTemplate,然后将UserControl及其设置为适用对象的DataContext插入到网格中,而不必担心从ItemsControl继承。
https://stackoverflow.com/questions/6191600
复制相似问题