无法在WPF ListBox中滚动

问题描述 投票:0回答:1

我的WPF窗口中有一个水平的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>

Picture of the Listbox with the grayed out vertical scrollbars

wpf xaml listbox
1个回答
0
投票

你必须改变外部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>
© www.soinside.com 2019 - 2024. All rights reserved.