有啥方法可以在不同的行中显示 GridView 的列?

Posted

技术标签:

【中文标题】有啥方法可以在不同的行中显示 GridView 的列?【英文标题】:is there any way to show the columns of a GridView in different rows?有什么方法可以在不同的行中显示 GridView 的列? 【发布时间】:2020-10-12 17:41:26 【问题描述】:

我有一个 ListView,它将显示 Google 日历事件的一些值,该应用程序可让您查看某个特定日期的事件,您可以添加更多、编辑或删除事件。

目前,我正在显示所有事件仅用于测试,并且我正在使用网格视图来重新排序属性和标题,但是该事件的值太多并且太宽,我想要的是拆分这个两行列

A 列、B 列、C 列 信息信息信息

D 列、E 列... 信息信息

对于每个元素。

而不是 A、B、C 列... 信息信息信息信息

在一行中。

有没有办法用gridview 做到这一点?或者我必须辞职并使用自定义控件或网格做类似的事情。

我的列表视图

<ListView Background="Transparent" 
                  x:Name="DatosEvento"
                  Margin="5"
                  MinWidth="Binding ActualWidth, ElementName=Calendar"
                  Width="Auto"
                  ItemsSource="Binding Path=Eventos"
            Grid.Row="1" 
            Grid.Column="1">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Organizador" DisplayMemberBinding="Binding Path=Organizer.DisplayName" />
                    <GridViewColumn Header="Correo Organizador">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="Binding Path=Organizer.Email" TextDecorations="Underline" Foreground="Blue" Cursor="Hand" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Nombre Evento" DisplayMemberBinding="Binding Path=Summary"/>
                    <GridViewColumn Header="Estado" DisplayMemberBinding="Binding Path=Status"/>
                    <GridViewColumn Header="Fecha Fin" DisplayMemberBinding="Binding Path=End.Date"/>
                    <GridViewColumn Header="Actualizado el" DisplayMemberBinding="Binding Path=Updated.Date"/>
                    <GridViewColumn Header="Enlace">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="Binding Path=htmlLink" TextDecorations="Underline" Foreground="Blue" Cursor="Hand" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

【问题讨论】:

这在默认的GridView 下是不可能的。这种布局的问题是用户必须向下滚动才能找到下一列。如果您的表有 1,000 行,则用户必须滚动所有这些行才能找到下一列的数据。这远非直观,并且对数据集的可读性产生负面影响,因为相关数据即行将被分开。与其垂直滚动查找列,不如垂直滚动更方便。如果列在GridView 的视口之外,垂直滚动条将自动显示。 也许您选择的视图或控件是错误的选择。也许你应该以不同的方式呈现你的数据。也许你应该创建一个事件项数据类,它存储单个事件的事件数据。然后使用此事件项的集合填充ListBox,其中ListBox.ItemPanel 设置为使用WrapPanel。您可以设置此面板的宽度以控制发生换行之前的项目数。 好的,我正在混合使用 gridview 和 stackpanels 来做类似的事情,感谢您的回答 【参考方案1】:

由于我无法将评论标记为解决方案,因此我已更改网格视图以混合使用 wrap 和 stackpanels,正如 @BionicCode 建议的那样(他建议 wrappanel 我刚刚添加了一些 stackpanel 来做类似于 gridview 的事情)

【讨论】:

以上是关于有啥方法可以在不同的行中显示 GridView 的列?的主要内容,如果未能解决你的问题,请参考以下文章

如果文本很长,如何使小吃栏操作按钮显示在不同的行中?

如何在不同的行中添加 alertView 中的按钮?

css在不同的行中排列两个div块[重复]

android的:tableLayout和gridview有啥不同

gridview ,repeater,datalist有啥区别

Laravel:在不同的行中使用不同的 where 条件进行查询