如何以Listview和Grid作为父级在UWP中滚动整个列表?

如何以Listview和Grid作为父级在UWP中滚动整个列表?,listview,uwp,grid,scrollview,Listview,Uwp,Grid,Scrollview,我已经看到这个问题在这里被忽略了好几次,但我仍然没有找到我的答案。 我什么都试过了,但那该死的列表不会一直向下滚动。我试着把它放在一个stackpanel,一个scrollviewer作为父对象,将高度设置为*,或者自动,或者固定,在网格内部或者在listview本身内部。但似乎什么都不管用。这里有人能帮帮我吗?多谢各位 <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/>

我已经看到这个问题在这里被忽略了好几次,但我仍然没有找到我的答案。 我什么都试过了,但那该死的列表不会一直向下滚动。我试着把它放在一个stackpanel,一个scrollviewer作为父对象,将高度设置为*,或者自动,或者固定,在网格内部或者在listview本身内部。但似乎什么都不管用。这里有人能帮帮我吗?多谢各位

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0">
        <ListBox x:Name="categoryListBox" ItemsSource="{Binding Categories}" HorizontalAlignment="Center">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <Button 
                            Content="{Binding}"
                            Command="{Binding DataContext.GetProductsFromCategoriesCommand, ElementName=pageFoodAndDrinks}"
                            CommandParameter="{Binding}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
    <ContentDialog 
                x:Name="ContentDialog"
                PrimaryButtonText="Order"
                CloseButtonText="Cancel">
        <StackPanel>
            <TextBlock Text="Do you wish to order?"></TextBlock>
            <TextBox x:Name="amount"></TextBox>
        </StackPanel>
    </ContentDialog>
    <ScrollViewer Grid.Row="1"  HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch">
        <StackPanel>
            <ListView x:Name="productsListView" ItemsSource="{Binding Products}" SelectionChanged="ProductsListView_SelectionChangedAsync">
                <ListView.HeaderTemplate>
                    <DataTemplate>
                        <Grid Padding="12" Background="{ThemeResource SystemBaseLowColor}">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="200"/>
                                <ColumnDefinition Width="900"/>
                                <ColumnDefinition Width="200"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" Text="Product" Style="{ThemeResource CaptionTextBlockStyle}"/>
                            <TextBlock Grid.Column="1" Text="Description" Style="{ThemeResource CaptionTextBlockStyle}"/>
                            <TextBlock Grid.Column="2" Text="Price" Style="{ThemeResource CaptionTextBlockStyle}"/>
                        </Grid>
                    </DataTemplate>
                </ListView.HeaderTemplate>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid x:Name="Product">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="200"/>
                                <ColumnDefinition Width="900"/>
                                <ColumnDefinition Width="200"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" Text="{Binding ProductName}" TextWrapping="Wrap" MaxWidth="150"></TextBlock>
                            <TextBlock Grid.Column="1" Text="{Binding ProductDescription}" TextWrapping="Wrap" MaxWidth="800"></TextBlock>
                            <TextBlock Grid.Column="2" Text="{Binding ProductPrice}" TextWrapping="Wrap" MaxWidth="150"></TextBlock>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackPanel>
    </ScrollViewer>
</Grid>


从您提供的代码中,我可以看到一些问题

1.不能将
列表框
列表视图
放在高度定义为
自动的内。这会使其中的滚动查看器变得无用

2.切勿将
列表框
列表视图
放在
堆栈面板
中,这将禁用数据虚拟化。如果没有
DataVirtualization
,处理较大的数据将是一片混乱

3.不要在主UI元素之间保留ContentDialog

下面是修改后的代码,它将分别滚动
列表视图
列表框

    <ContentDialog 
                x:Name="ContentDialog"
                PrimaryButtonText="Order"
                CloseButtonText="Cancel">
        <StackPanel>
            <TextBlock Text="Do you wish to order?"></TextBlock>
            <TextBox x:Name="amount"></TextBox>
        </StackPanel>
    </ContentDialog>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
        <ListBox Grid.Row="0" x:Name="categoryListBox" ScrollViewer.VerticalScrollMode="Disabled" ItemsSource="{Binding Categories}" HorizontalAlignment="Center">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <Button 
                            Content="{Binding}"
                            Command="{Binding DataContext.GetProductsFromCategoriesCommand, ElementName=pageFoodAndDrinks}"
                            CommandParameter="{Binding}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

            <ListView x:Name="productsListView" Grid.Row="1" ItemsSource="{Binding Products}" SelectionChanged="ProductsListView_SelectionChangedAsync">
                <ListView.HeaderTemplate>
                    <DataTemplate>
                        <Grid Padding="12" Background="{ThemeResource SystemBaseLowColor}">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="200"/>
                                <ColumnDefinition Width="900"/>
                                <ColumnDefinition Width="200"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" Text="Product" Style="{ThemeResource CaptionTextBlockStyle}"/>
                            <TextBlock Grid.Column="1" Text="Description" Style="{ThemeResource CaptionTextBlockStyle}"/>
                            <TextBlock Grid.Column="2" Text="Price" Style="{ThemeResource CaptionTextBlockStyle}"/>
                        </Grid>
                    </DataTemplate>
                </ListView.HeaderTemplate>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid x:Name="Product">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="200"/>
                                <ColumnDefinition Width="900"/>
                                <ColumnDefinition Width="200"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" Text="{Binding ProductName}" TextWrapping="Wrap" MaxWidth="150"></TextBlock>
                            <TextBlock Grid.Column="1" Text="{Binding ProductDescription}" TextWrapping="Wrap" MaxWidth="800"></TextBlock>
                            <TextBlock Grid.Column="2" Text="{Binding ProductPrice}" TextWrapping="Wrap" MaxWidth="150"></TextBlock>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
</Grid>

编辑
您可以使用上面的结构,也可以在代码中为
ListView
ScrollViewer.VerticalScrollMode=“Disabled”设置此属性。这将通过停止
ListView

中的默认
ScrollViewer
解决此问题。您好,我确实想帮助您解决此问题,但我想先与您确认一些事情。我复制了您的代码并创建了一个小演示,但您所说的内容让我有点困惑
滚动整个列表
。你的意思是什么。滚动顶部的列表框,2。滚动ListView,但将标题保持在顶部,或3。让ListBox和ListView一起滚动?包含ListBox的stackpanel不需要滚动,它是我的视图的标题,只有ListView应该滚动。现在,stackpanel中的listbox不会滚动,这很好。listview只会滚动一点点,我似乎不能再滚动几个元素了,所以我需要的是2。你已经给了一个
ScrollViewer
外部
listview
,这意味着实际上有两个
ScrollViewer
。默认情况下,一个在外部,另一个在内部
ListView
。您可以通过设置此属性ScrollViewer来禁用
ListView
中的
ScrollViewer。VerticalScrollMode=“Disabled”我已经尝试过了,它也不起作用。它会像以前一样滚动一点,但仍然不可能一直向下滚动