无法在 WPF 列表框中滚动

Unable to scroll within WPF ListBox

我的 WPF window 中有一个水平列表框,其中的每个项目都包含另一个垂直列表框。

我希望能够在内部 ListBox 或外部 ListBox 中垂直滚动。

水平滚动不是问题,因为当项目列表大于 ListBox 边距时它会自动让我这样做,但是我未能使我的任何一个 ListBox 垂直滚动。

我曾尝试在任一 ListBox 上使用 ScrollViewer.VerticalScrollBarVisibility="Visible",但滚动条变灰且无法使用,即使在 ListBox 的边距之外有项目也是如此。

我的XAML:

<StackPanel>
    <Grid Margin="100">
        <ListBox x:Name = "ColumnList" ItemsSource="{Binding Board.Columns}" VerticalAlignment="Top" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border BorderBrush = "Black" MinWidth="200" MaxWidth="200" MinHeight="300" MaxHeight="300" ScrollViewer.VerticalScrollBarVisibility="Visible">
                        <StackPanel>
                            <TextBox Text = "{Binding Name}" IsReadOnly="True"/>
                            <ListBox x:Name="TasksList" ItemsSource="{Binding Tasks}" MouseDoubleClick="TasksList_MouseDoubleClick" ScrollViewer.VerticalScrollBarVisibility="Visible" SelectedItem="{Binding Path=DataContext.Task,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <Border BorderBrush = "Black" BorderThickness="2">
                                            <StackPanel>
                                                <TextBox Text = "{Binding Title}" IsReadOnly="True" />
                                                <TextBox Text="{Binding Description}" IsReadOnly="True"/>
                                                <TextBox Text = "{Binding CreationDate}" IsReadOnly="True" />
                                                <TextBox Text="{Binding DueDate}" IsReadOnly="True"/>
                                                <TextBox Text = "{Binding EmailAssignee}" IsReadOnly="True" />
                                            </StackPanel>
                                        </Border>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
            <ListBox.ItemsPanel >
                <ItemsPanelTemplate >
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>
    </Grid>
</StackPanel>

您必须更改外部 ListBox ItemTemplate - 使用 Grid 而不是 StackPanel。 StackPanel 中的内部 ListBox 获取显示所有项目的高度,因此无法激活滚动,即使屏幕上没有看到这些项目。

<DataTemplate>
    <Border BorderBrush = "Black" 
            MinWidth="200" MaxWidth="200" 
            MinHeight="300" MaxHeight="300"
            ScrollViewer.VerticalScrollBarVisibility="Visible">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <TextBox Text = "{Binding Name}" IsReadOnly="True"/>

            <ListBox x:Name="TasksList" Grid.Row="1">
                 <!--omitted for clarity-->   
            </ListBox>
        </Grid>
    </Border>
</DataTemplate>