c# – 在添加/删除项目时动态调整ListView高度?
发布时间:2020-12-15 22:18:33 所属栏目:百科 来源:网络整理
导读:我有一个3级嵌套ListView绑定到相同的3级嵌套集合. MainItems在第3级添加. 未修改,所有级别都有滚动条.在添加的项目上,我编辑ListViewItem的包含网格以动态调整高度. 我成功删除了第3级滚动条.但是,我想删除第二级,我似乎无法做到. 当我尝试调整第一级ListVi
我有一个3级嵌套ListView绑定到相同的3级嵌套集合. MainItems在第3级添加.
未修改,所有级别都有滚动条.在添加的项目上,我编辑ListViewItem的包含网格以动态调整高度. 我成功删除了第3级滚动条.但是,我想删除第二级,我似乎无法做到. 当我尝试调整第一级ListViewItem的高度时,第一级上的滚动条刚刚消失,但高度根本没有调整. 我想要做的只是让ScrollBar在第一级并从那里滚动. 基本上,这样的事情: 这是我目前的代码: <Grid x:Name="ParentGrid"> <ListView x:Name="Level1ListView" ItemsSource="{Binding Path=Level1}"> <ListView.ItemTemplate> <DataTemplate> <Grid x:Name="GridLevel1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <ToolKit_Controls:LayoutTransformControl Grid.Column="0"> <ToolKit_Controls:LayoutTransformControl.Transform> <RotateTransform x:Name="rotateTransform" Angle="270"/> </ToolKit_Controls:LayoutTransformControl.Transform> <TextBlock Text="{Binding Path=Level1NameString}" FontSize="32" HorizontalAlignment="Center" /> </ToolKit_Controls:LayoutTransformControl> <ListView x:Name="Level2ListView" ItemsSource="{Binding Path=Level2}" Grid.Column="1" > <ListView.ItemTemplate> <DataTemplate> <Grid x:Name="GridLevel2"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Border BorderBrush="White" BorderThickness="1" Grid.Row="0"/> <TextBlock Text='{Binding Path=Level2Name}' Foreground="Black" FontSize="18" Grid.Row="0"/> <Grid x:Name="GridLevel3" Width="300" Height="100" Grid.Row="1"> <ListView x:Name="ListView_Level3" IsSwipeEnabled="False" ManipulationMode="None" ItemsSource="{Binding Path=Level3DisplayCollection}" Grid.Column="1"> <ListView.ItemContainerTransitions> <TransitionCollection> <EntranceThemeTransition IsStaggeringEnabled="False" /> </TransitionCollection> </ListView.ItemContainerTransitions> </ListView> </Grid> </Grid> </DataTemplate> </ListView.ItemTemplate> </ListView> </Grid> </DataTemplate> </ListView.ItemTemplate> <ListView.ItemsPanel> <ItemsPanelTemplate> <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="1" ></WrapGrid> </ItemsPanelTemplate> </ListView.ItemsPanel> </ListView> 并且重要的代码改变了项目的高度: var GridLevel1 = TypedAssociatedObject.GetAncestors().Where(a => a.Named("GridLevel1")).FirstOrDefault() as Grid; //GridLevel1.Height = GridLevel1.ActualHeight + 50; var GridLevel2 = TypedAssociatedObject.GetAncestors().Where(a => a.Named("GridLevel2")).FirstOrDefault() as Grid; GridLevel2.Height = GridLevel2.ActualHeight + 50; var GridLevel3 = TypedAssociatedObject.GetAncestors().Where(a => a.Named("GridLevel3")).FirstOrDefault() as Grid; GridLevel3.Height = GridLevel3.ActualHeight + 50; 级别1被注释掉,因为当我添加它时,虽然删除了第二个滚动条,但ListViewItem高度不会改变,导致UI错误并且不显示所有内容.您还注意到第1级滚动条保持相同的大小: 我想要的是扩展Header 1的高度,以便所有内容仍然显示,右侧的1st Level Scrollbar是扩展/增长的. 谁能帮助指出我做错了什么? 谢谢! 编辑:这是一个Windows商店应用程序. 解决方法
在内部列表视图中将ItemsPanel设置为StackPanel.这样您就不需要调整每个项目的高度.
同样要隐藏滚动条,请在内部列表视图中使用ScrollViewer.VerticalScrollBarVisibility =“Hidden”. 你考虑过使用grouping吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |