我正在尝试创建一个在项之间有分隔符的ItemsControl,例如创建导航面包屑的控件。我希望控件是完全泛型的。
我最初的方法是创建扩展ItemsControl,添加一个SeparatorTemplate属性,然后让类在ItemsControl的ItemsHost中添加分隔符。这种方法的问题是,如果您向容器面板添加额外的项,ItemGenerator会变得混乱,这些项的顺序会打乱,无法正确删除。
所以我的第二个计划是创建一个全新的控件来模拟ItemsControl,但是我遇到的问题是我找不到实例化ItemsPanelTemplate的方法。我想提供一个像ItemsControl一样的ItemsPanel属性,但是我不能从该模板创建面板。
有没有人能想出一种方法来实例化ItemsPanelTemplate,或者在不破坏ItemGenerator的情况下向ItemsControl的面板添加控件?
发布于 2010-06-08 23:28:41
嗯,我自己还没有试过,但我以为你会重写GetContainerForItemOverride来获取它。
您可以创建一个新的BreadCrumbItem控件,它是一个模板化的ContentControl,在它的默认模板中有典型的ContentPresenter以及您想要用作默认分隔符的任何东西,所有这些都在Grid或StackPanel中。
GetContainerForItemOverride生成此BreadCrumbItem的新实例,并将其ContentTemplate设置为来自您的ItemTemplate派生( BreadCrumb控件?)的ItemsControl属性。
您的BreadCrumb控件还将公开您分配给在GetContainerForItemOverride期间创建的BreadCrumbItem的BreadCrumbItemStyle属性。
为了完整性,您可能还需要在BreadCrumb控件中实现其他*Container*Override方法。
https://stackoverflow.com/questions/2998124
复制相似问题