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