实例化ItemsPanelTemplate

时间:2010-06-08 14:17:47

标签: c# silverlight

我正在尝试创建一个在项目之间有分隔符的ItemsControl,例如用于创建导航面包屑的控件。我希望控件完全通用。

我的原始方法是创建扩展ItemsControl,添加一个SeparatorTemplate属性,然后让类将分隔符添加到ItemsControl的ItemsHost。这种方法的问题在于,如果您向容器面板添加额外的项目,则ItemGenerator会混淆并且项目出现故障并且无法正确删除。

所以我的第二个计划是创建一个可以模拟ItemsControl的全新控件,但我遇到的问题是我找不到实例化ItemsPanelTemplate的方法。我想像ItemsControl一样提供ItemsPanel属性,但我无法从该模板创建一个面板。

有人可以想办法实例化ItemsPanelTemplate或在不破坏ItemGenerator的情况下将控件添加到ItemsControl面板的方法吗?

1 个答案:

答案 0 :(得分:0)

好吧,我自己没有尝试过,但我原本以为你会覆盖GetContainerForItemOverride来实现这个目标。

你可以创建一个新的BreadCrumbItem控件,它是一个模板化的ContentControl,在默认模板中有典型的ContentPresenter,默认情况下你想在{ {1}}或Grid

StackPanel生成此GetContainerForItemOverride的新实例,将BreadCrumbItem的{​​{1}}属性设置为ContentTemplate衍生产品ItemTemplate控制?)。

您的ItemsControl控件还会公开您为BreadCrumb期间创建的BreadCrumb分配的BreadCrumbItemStyle属性。

为了完整起见,您可能还需要在BreadCrumbItem控件中实施其他GetContainerForItemOverride方法。