我需要显示项目控制作为选项卡的主要群体。
有一个ItemsControl.GroupStyle属性,它包含GroupStyle和GroupStyle.Panel属性。
从本质上讲,我想实现这一点:
<ItemsControl>
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<TabControl/> <!-- (1) -->
</ItemsPanelTemplate>
</GroupStyle.Panel>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TabItem Header="{Binding Name}"> <!-- (2) -->
<TabItem.Content>
<ItemsPresenter />
</TabItem.Content>
</TabItem>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ItemsControl.GroupStyle>
</ItemsControl>
不幸的是,这有两个问题:
- TabControl不是Panel
- GroupItem中的TabItem。模板被打包在GroupItem中,但tabcontrol只包含TabItem。
2条答案
按热度按时间9jyewag01#
到目前为止我找到的一个部分解决方案是使用TabControl,其中ItemsSource绑定到CollectionView.Groups,并且在TabControl.ContentTemplate中使用ItemsControl绑定到当前组Items:
其中转换器为:
不幸的是,这是另一个模板的一部分,我的ItemsControl包含了很多对TemplatedParent的引用,这些引用现在是无效的,因为它现在是TabControl的模板。
2sbarzqh2#
问题1并不难解决- TabControl在内部使用TabPanel,因此您可以像这样连接它:
这会让你得到headered标签,这是进步,我希望:)
问题2和让选项卡内容本身显示出来是一个更大的挑战。可能值得尝试使用转换器或带有ItemContainerGenerator的shenannigans。我会更新我的帖子,如果有什么聪明的想法。