WPF多行选项卡控件,无需重新排列行
当水平尺寸太小时,WPF选项卡控件及其默认选项卡面板会将选项卡项排列成多行。然后,选项卡选择会更改这些行的顺序,因此选定的选项卡项始终位于第一行 我找到了几篇关于如何用另一个items控件替换TabPanel的文章,这样他们就可以不使用多行行为而使用滚动选项卡WPF多行选项卡控件,无需重新排列行,wpf,tabcontrol,Wpf,Tabcontrol,当水平尺寸太小时,WPF选项卡控件及其默认选项卡面板会将选项卡项排列成多行。然后,选项卡选择会更改这些行的顺序,因此选定的选项卡项始终位于第一行 我找到了几篇关于如何用另一个items控件替换TabPanel的文章,这样他们就可以不使用多行行为而使用滚动选项卡 我希望保留多行(无滚动),但禁用行的重新排列。创建选项卡后,无论选择如何更改,它们都应保持在原来的位置。这可能吗 您是否尝试过用类似的内容覆盖默认样式?ie:使用包装而不是标签面板 <Style x:Key="{x:Type Tab
我希望保留多行(无滚动),但禁用行的重新排列。创建选项卡后,无论选择如何更改,它们都应保持在原来的位置。这可能吗 您是否尝试过用类似的内容覆盖默认样式?ie:使用包装而不是标签面板
<Style x:Key="{x:Type TabControl}" TargetType="{x:Type TabControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid TabNavigation="Local" SnapsToDevicePixels="true" ClipToBounds="true">
<Grid.ColumnDefinitions>
<ColumnDefinition Name="ColumnDefinition0" />
<ColumnDefinition Name="ColumnDefinition1" Width="0" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Name="RowDefinition0" Height="Auto" />
<RowDefinition Name="RowDefinition1" Height="*" />
</Grid.RowDefinitions>
<WrapPanel Name="HeaderPanel" ZIndex="1" TabIndex="1" Column="0" Row="0" Margin="2,2,2,0" IsItemsHost="true" />
<Border Name="ContentPanel" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" TabNavigation="Local" DirectionalNavigation="Contained" TabIndex="2" Column="0" Row="1">
<ContentPresenter Name="PART_SelectedContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="{TemplateBinding Padding}" ContentSource="SelectedContent" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我找到的唯一解决方案是修改框架的TabPanel类,使其int GetActiveRow(int[]解决方案)
方法始终返回0。虽然这解决了问题,但我不确定以这种方式使用框架的源代码是否合法。这可能是可能的,但请注意,如果您选择了上面一行中的选项卡,并且这些行没有切换,则会有一个与选项卡断开连接的选项卡标题(这可能会很尴尬)。这就是你想要的吗?你可能是对的,但我也定制了它的外观,在这种特殊情况下,断开连接不是问题。这也是一个问题,可惜没有解决方案。多行选项卡的行切换会使眼睛无法记住它们的模式,并使通过拖动进行重新排序变得困难。这会增加注意力,一旦被认识到就会令人沮丧。