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

时间:2015-08-16 16:37:08

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

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

未修改,所有级别上有滚动条。在添加项目时,我编辑ListViewItem的包含网格以动态调整高度。

我已成功删除 第三级滚动条。但是,我想删除第二级,我似乎无法做到。

当我尝试调整第一级ListViewItem 的高度时,第一级的滚动条会消失,但根本不会调整高度。

我想要做的是 ONLY 第一级上的ScrollBar并从那里滚动。

基本上是这样的:

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;

级别1被注释掉了,因为当我添加它时,虽然第二个滚动条被删除但ListViewItem高度不会改变,导致UI错误并且不显示所有内容。您还注意到第1级滚动条保持相同的大小:

enter image description here

我想要的是扩展 标题1 的高度,以便所有内容仍然显示,右侧的第一级滚动条是延伸/成长的。

任何人都可以帮助指出我做错了吗?

谢谢!

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

1 个答案:

答案 0 :(得分:1)

在内部列表视图中将p = regex.compile(r'(?r)\w+(?:-\w+)*\M', regex.U) for line in s.split('\n'): print p.search(line).group(0) 设置为ItemsPanel。这样您就不需要调整每个项目的高度。 同样要隐藏滚动条,请使用StackPanel

您是否考虑过使用grouping