在Windows窗体中,TabControl的默认行为是,如果选项卡占用太多空间(MultiLine = false),则选项卡会溢出到可滚动区域。
在WPF中实现此行为的最佳方法是什么?
更新
我试图使用TabControl.ItemsPanel
找到一个解决方案,但似乎我放在那里的任何内容都被完全忽略了,所以出于这个原因,我已经走得很艰难,开始于TabControl.Template
令人难以置信的是,如果事实证明这是正确的方法,我们必须这样做。
远没有完成,我对问题的解决方案如下:
<TabControl>
<TabControl.Template>
<ControlTemplate TargetType="{x:Type TabControl}">
<DockPanel>
<ScrollViewer DockPanel.Dock="Top"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Disabled">
<StackPanel Orientation="Horizontal" IsItemsHost="True" />
</ScrollViewer>
<ContentPresenter ContentSource="SelectedContent" />
</DockPanel>
</ControlTemplate>
</TabControl.Template>
<TabItem Header="One">First</TabItem>
<TabItem Header="Two">Second</TabItem>
<TabItem Header="Three">Third</TabItem>
<TabItem Header="Four">Fourth</TabItem>
<TabItem Header="Five">Fifth</TabItem>
</TabControl>
答案 0 :(得分:4)
在制作TabControl,其中标签沿左侧垂直堆叠时,我找到了适合您的解决方案:
http://www.blogs.intuidev.com/post/2010/02/10/TabControlStyling_PartThree.aspx
令人印象深刻的东西!
答案 1 :(得分:0)
最简单的选择是在TabControl上设置ItemsPanelTemplate。我认为默认是WrapPanel,因此是Multiline行为。 例如,将其更改为StackPanel,并可能添加ScrollViewer。
像这样的东西(只是在没有VS的情况下编码)
<TabControl>
<TabControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</TabControl.ItemsPanel>
</TabControl>
希望有所帮助...
答案 2 :(得分:0)
您替换模板的解决方案似乎是执行此操作的最佳方式。 TabItems的默认面板是TabPanel,我没有看到任何类似“should wrap”属性的内容。
该文档包含使用不同的TabPanel替换TabControl模板的示例:
http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.tabpanel.aspx
答案 3 :(得分:0)
几年前我遇到了同样的问题,我的解决方案是限制标题的大小,以及包含它的面板,当然你需要制作自己的模板,就像你开始的那样,我还需要实现一些滚动支持,所以我在滚动查看器的左侧和右侧放置了两个重复按钮。
我的灵感是来自wpf中称为IE标签的代码项目的一个很好的项目。 它像wpf一样古老而且运作良好
答案 4 :(得分:0)
我知道这是一篇较旧的帖子,但如果其他人在互联网上搜索,我想添加另一个想法。
如果将tabpanel的宽度设置为更大的值(假设这不是一个允许用户继续在其中添加其他标签的tabpanel)。如果您让用户向选项卡面板添加新选项卡,则需要添加滚动条。