Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF多行选项卡控件,无需重新排列行_Wpf_Tabcontrol - Fatal编程技术网

WPF多行选项卡控件,无需重新排列行

WPF多行选项卡控件,无需重新排列行,wpf,tabcontrol,Wpf,Tabcontrol,当水平尺寸太小时,WPF选项卡控件及其默认选项卡面板会将选项卡项排列成多行。然后,选项卡选择会更改这些行的顺序,因此选定的选项卡项始终位于第一行 我找到了几篇关于如何用另一个items控件替换TabPanel的文章,这样他们就可以不使用多行行为而使用滚动选项卡 我希望保留多行(无滚动),但禁用行的重新排列。创建选项卡后,无论选择如何更改,它们都应保持在原来的位置。这可能吗 您是否尝试过用类似的内容覆盖默认样式?ie:使用包装而不是标签面板 <Style x:Key="{x:Type Tab

当水平尺寸太小时,WPF选项卡控件及其默认选项卡面板会将选项卡项排列成多行。然后,选项卡选择会更改这些行的顺序,因此选定的选项卡项始终位于第一行

我找到了几篇关于如何用另一个items控件替换TabPanel的文章,这样他们就可以不使用多行行为而使用滚动选项卡


我希望保留多行(无滚动),但禁用行的重新排列。创建选项卡后,无论选择如何更改,它们都应保持在原来的位置。这可能吗

您是否尝试过用类似的内容覆盖默认样式?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。虽然这解决了问题,但我不确定以这种方式使用框架的源代码是否合法。

这可能是可能的,但请注意,如果您选择了上面一行中的选项卡,并且这些行没有切换,则会有一个与选项卡断开连接的选项卡标题(这可能会很尴尬)。这就是你想要的吗?你可能是对的,但我也定制了它的外观,在这种特殊情况下,断开连接不是问题。这也是一个问题,可惜没有解决方案。多行选项卡的行切换会使眼睛无法记住它们的模式,并使通过拖动进行重新排序变得困难。这会增加注意力,一旦被认识到就会令人沮丧。