c#如何在ListView中展开项目以占用多行?

时间:2008-11-18 10:18:08

标签: c# wpf winforms listview

目前我有一个ListView(使用详细信息视图)。我想实现一种行为,当用户选择单个项目(日志条目)时,日志条目会扩展(从一行到多行),以提供有关发生的错误的更详细信息。

我的问题是:这可能吗?如果是这样,有没有一个很好的资源可以用来帮助我?

编辑:

如果我使用WPF,那么我想我会将ElementHost与控件一起使用。但是,我完全不知道如何设计/编码/使用WPF组件。有什么建议吗?

4 个答案:

答案 0 :(得分:5)

编辑:对不起,这是wpf

我用来实现相同目的的技巧是创建一个触发器来显示默认为折叠的辅助网格。

试试这个:

    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>

                    <Grid Grid.Row="0" Height="20" >
                        <TextBlock Text="Not Selected"></TextBlock>
                    </Grid>
                    <Grid x:Name="selectedOnlyGrid" Grid.Row="1" Visibility="Collapsed">
                        <TextBlock Text="Selected"></TextBlock>
                    </Grid>

                </Grid>

                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}, AncestorLevel=1}, Path=IsSelected}" Value="True">
                        <Setter Property="Visibility" Value="Visible" TargetName="selectedOnlyGrid" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

答案 1 :(得分:2)

阅读CodeProject上的帖子:Extended List Box

应该拥有您需要的所有信息:)

答案 2 :(得分:1)

使用ListView执行此操作的一种方法是在选择“父级”时为每个额外的行动态添加新的ListViewItem。同样,当选择更改为另一个项目时,您需要删除它们。

您还可能希望覆盖默认的上/下行为以跳过子项。

答案 3 :(得分:0)

不是你问题的直接答案,但我认为 在这种情况下,你最好使用网格。