WPF TabControl MVVM:TabItems溢出

WPF TabControl MVVM:TabItems溢出,wpf,vb.net,xaml,mvvm,Wpf,Vb.net,Xaml,Mvvm,我目前正在为AutoCAD开发一个插件,脚本语言是VB.net 基本上我有一个用户控件,其中包含一个TabControl,每个TabItem都是一个对象,它只包含TabItem.Header和TabItem.Content定义。选项卡项是通过xml文件动态生成的。当我使用MVVM时,这一切都存储在一个ObservableCollection中,该集合绑定到TabControl项 由于我正在和MVVM打交道,而且我对WPF还比较陌生,所以我需要一些关于以下任务的指导:到目前为止,一切都很好,但我唯

我目前正在为AutoCAD开发一个插件,脚本语言是VB.net

基本上我有一个用户控件,其中包含一个TabControl,每个TabItem都是一个对象,它只包含TabItem.Header和TabItem.Content定义。选项卡项是通过xml文件动态生成的。当我使用MVVM时,这一切都存储在一个ObservableCollection中,该集合绑定到TabControl项

由于我正在和MVVM打交道,而且我对WPF还比较陌生,所以我需要一些关于以下任务的指导:到目前为止,一切都很好,但我唯一的问题是,我希望在可见选项卡项的末尾有一个小按钮。当我点击它时,我可以切换所有的标签,不管它们是否可见

为了更好地理解,这应该是期望的结果:

我只想简单解释一下如何实现这一点(网络上的所有示例对我来说都相当复杂)。我用ScrollViewer试过了,但效果不好。以下是当前代码:

选项卡控件模板:


主窗口XAML摘录:


选项卡项类:

Private Property\u头作为字符串
作为字符串的公共属性头
得到
返回头
结束
设置(值为字符串)
_标题=值
端集
端属性
私有属性\u内容作为字符串
作为字符串的公共属性内容
得到
返回内容
结束
设置(值为字符串)
_内容=价值
端集
端属性

提前谢谢

我自己解决了这个问题。以下是模板代码的工作件:

<Style  x:Key="TabControl"
        TargetType="{x:Type TabControl}">

    <Setter Property="Background"
            Value="{StaticResource TabBackground}">
    </Setter>
    <Setter Property="BorderBrush"
            Value="{StaticResource TabItemActiveBorder}">
    </Setter>
    <Setter Property="BorderThickness"
            Value="0,1,1,0">
    </Setter>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabControl}">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>

                    <ScrollViewer HorizontalScrollBarVisibility="Hidden"
                                  VerticalScrollBarVisibility="Hidden"
                                  Grid.Column="1"
                                  Grid.Row="0">

                        <TabPanel x:Name="HeaderPanel"
                                  Panel.ZIndex="1"
                                  Margin="0,2,2,2"
                                  IsItemsHost="True"
                                  Background="Transparent" />
                    </ScrollViewer>

                    <ContentPresenter x:Name="PART_SelectedContentHost"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                      Margin="{TemplateBinding Padding}"
                                      ContentSource="SelectedContent" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>