我正在尝试创建一个在项目之间有分隔符的ItemsControl
,例如用于创建导航面包屑的控件。我希望控件完全通用。
我的原始方法是创建扩展ItemsControl
,添加一个SeparatorTemplate属性,然后让类将分隔符添加到ItemsControl的ItemsHost
。这种方法的问题在于,如果您向容器面板添加额外的项目,则ItemGenerator会混淆并且项目出现故障并且无法正确删除。
所以我的第二个计划是创建一个可以模拟ItemsControl
的全新控件,但我遇到的问题是我找不到实例化ItemsPanelTemplate
的方法。我想像ItemsControl
一样提供ItemsPanel属性,但我无法从该模板创建一个面板。
有人可以想办法实例化ItemsPanelTemplate
或在不破坏ItemGenerator的情况下将控件添加到ItemsControl
面板的方法吗?
答案 0 :(得分:0)
好吧,我自己没有尝试过,但我原本以为你会覆盖GetContainerForItemOverride
来实现这个目标。
你可以创建一个新的BreadCrumbItem
控件,它是一个模板化的ContentControl
,在默认模板中有典型的ContentPresenter
,默认情况下你想在{ {1}}或Grid
。
StackPanel
生成此GetContainerForItemOverride
的新实例,将BreadCrumbItem
的{{1}}属性设置为ContentTemplate
衍生产品ItemTemplate
控制?)。
您的ItemsControl
控件还会公开您为BreadCrumb
期间创建的BreadCrumb
分配的BreadCrumbItemStyle
属性。
为了完整起见,您可能还需要在BreadCrumbItem
控件中实施其他GetContainerForItemOverride
方法。