【问题标题】:Dynamically adjust ListView height on adding / removing items?在添加/删除项目时动态调整 ListView 高度?
【发布时间】:2015-08-16 16:37:07
【问题描述】:

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

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

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

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

我想要做的是1st 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 被注释掉,因为当我添加它时,虽然 第二个滚动条被删除 ListViewItem 高度没有改变,导致 UI 错误并且没有显示所有内容。您还注意到第一级滚动条的大小保持不变:

我想要扩展 Header 1 的高度,以便一切仍然显示,右侧的 1st Level Scrollbar 是一种扩展/增长。

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

谢谢!

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

【问题讨论】:

  • 在我看来,使用TreeView 会更好。
  • 对不起,我忘了说这是一个 Windows 商店应用程序。不幸的是,我认为树视图不可用

标签: c# wpf listview windows-store-apps


【解决方案1】:

在您的内部列表视图中将ItemsPanel 设置为StackPanel。这样您就不需要调整每个项目的高度。 还要隐藏滚动条使用ScrollViewer.VerticalScrollBarVisibility="Hidden" on your inner list views.

您是否考虑过使用grouping

【讨论】:

  • 感谢克里斯蒂安!删除 ItemsPanel WrapGrid 解决了 1 级滚动条的问题!我尝试将 ItemsPanel 设置为 StackPanel 并删除对高度的动态添加,但似乎不起作用?我把它放在所有的 ListViews 上。发生的情况是,高度没有改变,虽然滚动条没有显示,但我仍然可以滚动以“查看”其他项目。
  • 我想通了,Height=100 或任何静态高度都会阻止 StackPanel 自动增加大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多