C# 是否在添加/删除项目时动态调整ListView高度?
我有一个绑定到同一个3级嵌套集合的3级嵌套ListView。主要项目在第三级添加 未经修改,所有级别上都有滚动条。在添加项目时,我编辑ListViewItem的包含网格的,以动态调整高度 我已成功删除第三级滚动条。但是,我也想删除第二级,这似乎是我做不到的 当我尝试调整第一级ListViewItem的高度时,第一级上的滚动条消失了,但高度根本没有调整 我想做的是只有在第一级上有滚动条,然后从那里滚动 基本上是这样的: 这是我当前的代码:C# 是否在添加/删除项目时动态调整ListView高度?,c#,wpf,listview,windows-store-apps,C#,Wpf,Listview,Windows Store Apps,我有一个绑定到同一个3级嵌套集合的3级嵌套ListView。主要项目在第三级添加 未经修改,所有级别上都有滚动条。在添加项目时,我编辑ListViewItem的包含网格的,以动态调整高度 我已成功删除第三级滚动条。但是,我也想删除第二级,这似乎是我做不到的 当我尝试调整第一级ListViewItem的高度时,第一级上的滚动条消失了,但高度根本没有调整 我想做的是只有在第一级上有滚动条,然后从那里滚动 基本上是这样的: 这是我当前的代码: <Grid x:Name="ParentGrid"
<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>
级别1被注释掉了,因为当我添加它时,尽管第二个滚动条被删除了,但是ListViewItem的高度没有改变,导致UI错误,没有显示所有内容。您还注意到,第一级滚动条的大小保持不变:
我想要的是扩展标题1的高度,以便所有内容仍然显示,右侧的第一级滚动条是扩展/增长的滚动条
谁能帮我指出我做错了什么
谢谢大家!
编辑:这是一个Windows应用商店应用程序。在内部列表视图中将
ItemsPanel
设置为StackPanel
。这样,您就不需要调整每个项目的高度。
还要隐藏滚动条,请在内部列表视图上使用ScrollViewer.VerticalScrollBarVisibility=“Hidden”。
您考虑过使用吗?在我看来,您最好使用
TreeView
。对不起,我忘了提到这是一个Windows应用商店应用程序。不幸的是,treeview不可用,我想谢谢克里斯蒂安!删除ItemsPanel WrapGrid修复了第一级滚动条的问题!我尝试将ItemsPanel设置为StackPanel,并删除高度的动态添加,但似乎不起作用?我把它放在所有的列表视图上。发生的情况是,高度没有改变,尽管滚动条没有显示,但我仍然可以滚动到“查看”其他项目。我发现,高度=100或任何静态高度都会阻止StackPanel自动增大大小。
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;