gpt4 book ai didi

c# - 在添加/删除项目时动态调整 ListView 高度?

转载 作者:行者123 更新时间:2023-11-30 12:43:06 24 4
gpt4 key购买 nike

我有一个绑定(bind)到同一个 3 级嵌套集合的 3 级嵌套 ListView。 MainItems 添加到第 3 级。

未修改,所有 层都有滚动条。在添加项目时,我编辑了 ListViewItem 的Containing Grid 以动态调整高度。

我已成功删除第三级滚动条。但是,我也想删除 2nd Level ,我似乎做不到。

当我尝试调整1st Level ListViewItem 的高度时,1st Level 上的滚动条就消失了,但根本没有调整高度。

我想做的是1st Level 上设置滚动条并从那里滚动。

基本上,是这样的:

Remove the 2nd level 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;

Level 1 被注释掉了,因为当我添加它时,虽然 2nd Scroll Bar 被移除,但 ListViewItem 高度没有改变,导致 UI 错误并且没有显示所有内容。您还注意到第一级滚动条保持相同的大小:

enter image description here

我想要的是扩展 Header 1 的高度,以便所有内容仍然显示,右边的1st Level Scrollbar 是一个延伸/成长的。

谁能帮忙指出我做错了什么?

谢谢!

编辑:这是一个 Windows 应用商店应用。

最佳答案

在内部 ListView 中将 ItemsPanel 设置为 StackPanel。这样您就不需要调整每个项目的高度。要隐藏滚动条,请在内部 ListView 上使用 ScrollViewer.VerticalScrollBarVisibility="Hidden"。

您是否考虑过使用 grouping

关于c# - 在添加/删除项目时动态调整 ListView 高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com