Srollviewer在TabControl.ItemsPanel

时间:2019-08-16 13:09:35

标签: wpf xaml scroll

我有一个带有选项卡控件的网格。我的目标是在屏幕左侧显示一个选项卡列表,该列表可以滚动(典型情况下大约有10个选项卡)。但是,我无法使其滚动。

我尝试过的方法(来自此处的其他答案)没有起作用:

  1. 将高度/最大高度放在面板上,网格
  2. 将整个内容包装在另一个面板中
  3. 将我的面板放入ScrollViewer中-无法这样做,因为我无法在ItemsPanelTemplate的可视树顶部放置非面板的内容
  4. 将ScrollViewer放入

用户控件的基本代码在这里:

<UserControl.Resources>
        <converters:StringToByteArrayConverter x:Key="StringToByteArrayConverter" />
        <DataTemplate x:Key="GroupTemplate">
            <DockPanel Background="{StaticResource LightGreyBrush}">
                <Image
                    Width="210"
                    Height="240"
                    DataContext="{Binding DataContext.MyPageModel.MyGraphics.Groups[0], RelativeSource={RelativeSource AncestorType=TabControl, Mode=FindAncestor}}"
                    DockPanel.Dock="Top"
                    Source="{Binding Graphic, Converter={StaticResource StringToByteArrayConverter}}" />
                <Label
                    HorizontalAlignment="Center"
                    Content="{Binding Name}"
                    DockPanel.Dock="Bottom" />
            </DockPanel>
        </DataTemplate>
    </UserControl.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="300" MaxHeight="510" />
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" Grid.Column="0">
            <TabControl
                ItemTemplate="{StaticResource GroupTemplate}"
                ItemsSource="{Binding MyPageModel.MyList.Groups}"
                TabStripPlacement="Left">
                <TabControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel
                            CanVerticallyScroll="True"
                            Orientation="Vertical"
                            ScrollViewer.CanContentScroll="True"
                            ScrollViewer.HorizontalScrollBarVisibility="Visible"
                            ScrollViewer.IsDeferredScrollingEnabled="False"
                            ScrollViewer.VerticalScrollBarVisibility="Visible" />
                    </ItemsPanelTemplate>
                </TabControl.ItemsPanel>
            </TabControl>
        </Grid>
        <Grid Grid.Row="1" />
    </Grid>

如何使标签列表在此处可滚动?

编辑:这是我想要的可视化(大致来说,绘画技能不好):

enter image description here

1 个答案:

答案 0 :(得分:1)

定义一个自定义ControlTemplate,在其中将ScrollViewer放在TabPanel周围。

您还必须将Height中第一个RowDefinition的{​​{1}}从Grid更改为Auto

*