列表视图不会垂直滚动

本文关键字:垂直 滚动 视图 列表 | 更新日期: 2023-09-27 18:29:38

我在TabItem中有许多元素,我想使ListView可垂直滚动,但按钮保留在顶部(不滚动(。我尝试将ListView包裹在ScrollViewer中,但它不会滚动。我可以将ScrollViewer放在ItemsControl之外并更新RowDefinition Height="*"和所有内容滚动,包括按钮,但这不是我所需要的。

XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>       
    <Menu Grid.Row="0" KeyboardNavigation.TabNavigation="Cycle">
        <MenuItem Header="File">
            <MenuItem Header="Exit" />
        </MenuItem>
        <MenuItem Header="Options" />
        <MenuItem Header="Help" />
    </Menu>
    <TextBlock Grid.Row="1" Text="Test" Height="23" Width="Auto" HorizontalAlignment="Left" TextWrapping="Wrap"/>
    <TabControl Grid.Row="2" >
        <TabItem Header="TabItem1">
            <ItemsControl>
                <StackPanel Orientation="Horizontal">
                    <Button Command="{Binding Button1}" Width="150" Margin="5" Height="22" HorizontalAlignment="Left">Button1</Button>
                    <Button Command="{Binding Button2}" CommandParameter="{Binding ElementName=listView}" Width="150" Margin="5" Height="22" HorizontalAlignment="Left">Button2</Button>
                </StackPanel>
                    <ScrollViewer>
                        <ListView Name="listView" Grid.Row="1" BorderThickness="0" ItemsSource="{Binding myItems}">
                            <ListView.View>
                                <GridView>
                                    <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}" Width="Auto" />
                                    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="Auto" />
                                </GridView>
                            </ListView.View>
                        </ListView>
                    </ScrollViewer>
                </ItemsControl>
        </TabItem>
        ... Other tabs
    </TabControl>   
</Grid>

列表视图不会垂直滚动

你不需要ItemsControl,默认会将项目放在垂直StackPanel,这给它的子级无限的高度来增长。换句话说,ListView具有无限的高度来增长以容纳所有项目,因此不会显示滚动条。请改用Grid,然后就不需要ScrollViewer了。无论如何,它是ListView默认模板的一部分

<TabItem Header="TabItem1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
       <StackPanel Orientation="Horizontal" Grid.Row="0">
            <Button Command="{Binding Button1}" Width="150" Margin="5" Height="22" HorizontalAlignment="Left">Button1</Button>
            <Button Command="{Binding Button2}" CommandParameter="{Binding ElementName=listView}" Width="150" Margin="5" Height="22" HorizontalAlignment="Left">Button2</Button>
        </StackPanel>
        <ListView Name="listView" Grid.Row="1" BorderThickness="0" ItemsSource="{Binding myItems}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}" Width="Auto" />
                    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="Auto" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</TabItem>

同样在主Grid不要将最后一行(包含 TabControl 的行(高度设置为自动,因为这将提供TabControl空间以适应整个ListView而无需滚动

<Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition />
</Grid.RowDefinitions>