GridView 概述
GridView 视图模式是 ListView 控件的视图模式之一。 GridView 类及其支持类使你和你的用户能够在通常使用按钮作为交互式列标题的表中查看项集合。 本主题介绍 GridView 类并概述其用法。
什么是 GridView 视图?
GridView 视图模式通过将数据字段绑定到列,并显示列标题来标识字段,从而展示数据项的列表。 默认 GridView 样式将按钮实现为列标题。 通过使用列标题的按钮,可以实现重要的用户交互功能:例如,用户可以单击列标题,根据特定列的内容对 GridView 数据进行排序。
说明
GridView 列标题使用的按钮控件派生自 ButtonBase。
下图展示了 ListView 内容的 GridView 视图。
GridView 列由 GridViewColumn 对象表示,这些对象可以自动调整其内容的大小。 (可选)可以将 GridViewColumn 显式设置为特定宽度。 可通过拖动列标题之间的手柄调整列的大小。 还可以动态添加、删除、替换和重新排序列,因为此功能内置于 GridView中。 但是,GridView 无法直接更新它显示的数据。
以下示例演示如何定义显示员工数据的 GridView。 在此示例中,ListView 将 EmployeeInfoDataSource
定义为 ItemsSource。 DisplayMemberBinding 的属性定义将 GridViewColumn 内容绑定到 EmployeeInfoDataSource
数据类别。
<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">
<ListView.View>
<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Employee Information">
<GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" Header="First Name" Width="100"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=LastName}" Width="100">
<GridViewColumnHeader>Last Name
<GridViewColumnHeader.ContextMenu>
<ContextMenu MenuItem.Click="LastNameCM_Click" Name="LastNameCM">
<MenuItem Header="Ascending" />
<MenuItem Header="Descending" />
</ContextMenu>
</GridViewColumnHeader.ContextMenu>
</GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=EmployeeNumber}" Header="Employee No." Width="100"/>
</GridView>
</ListView.View>
</ListView>
下图显示了上一个示例创建的表。 GridView 控件显示 ItemsSource 对象中的数据:
GridView 布局和样式
GridViewColumn 的列单元格和列标题具有相同的宽度。 默认情况下,每一列会根据内容自适应宽度。 (可选)可以将列设置为固定宽度。
相关数据内容以水平行显示。 例如,在上图中,每个员工的姓氏、名字和 ID 编号都显示为集,因为它们显示在水平行中。
在 GridView 中定义和设置列样式
定义要显示在 GridViewColumn中的数据字段时,请使用 DisplayMemberBinding、CellTemplate或 CellTemplateSelector 属性。 DisplayMemberBinding 属性优先于任一模板属性。
若要指定 GridView 的列中内容的对齐方式,请定义 CellTemplate。 对于使用 GridView 显示的 ListView 内容,请不要使用 HorizontalContentAlignment 和 VerticalContentAlignment 属性。
若要指定列标题的模板和样式属性,请使用 GridView、GridViewColumn和 GridViewColumnHeader 类。 有关详细信息,请参阅 GridView 列标题样式和模板概述。
将视觉元素添加到 GridView
若要将视觉元素(如 CheckBox 和 Button 控件)添加到 GridView 视图模式,请使用模板或样式。
如果将视觉对象元素显式定义为数据项,则它只能在 GridView中显示一次。 存在此限制,因为元素只能有一个父元素,因此只能在可视化树中出现一次。
在 GridView 中设置行样式
使用 GridViewRowPresenter 和 GridViewHeaderRowPresenter 类设置 GridView行的格式和显示。 有关如何在 GridView 视图模式下设置行样式的示例,请参阅 在实现 GridView的 ListView 中设置行样式。
使用 ItemContainerStyle 时的对齐问题
若要防止列标题和单元格之间的对齐问题,请不要设置属性或指定影响 ItemContainerStyle中项宽度的模板。 例如,请勿设置 Margin 属性或指定将 CheckBox 添加到在 ListView 控件上定义的 ItemContainerStyle 的 ControlTemplate。 而是在定义 GridView 视图模式的类上指定直接影响列宽的属性和模板。
例如,若要向 GridView 视图模式中的行添加 CheckBox,请将 CheckBox 添加到 DataTemplate,然后将 CellTemplate 属性设置为该 DataTemplate。
与 GridView 的用户交互
在应用程序中使用 GridView 时,用户可以与 GridView的格式进行交互和修改。 例如,用户可以对列重新排序、调整列大小、选择表格中的项,以及滚动浏览内容。 还可以定义当用户单击列标题按钮时响应的事件处理程序。 事件处理程序可以执行操作,例如根据列的内容对 GridView 中显示的数据进行排序。
以下列表更详细地讨论了如何使用 GridView 进行用户交互的功能:
使用拖放方法对列重新排序。
用户可以在列标题上方按鼠标左键,然后将该列拖动到新位置,从而对 GridView 中的列重新排序。 当用户拖动列标题时,将显示标题的浮动版本以及显示列的插入位置的黑色实线。
如果想要修改标题的浮动版本的默认样式,请为 GridViewColumnHeader 类型指定一个 ControlTemplate,当 Role 属性设置为 Floating 时会触发该类型。 有关详细信息,请参阅为拖动的 GridView 列标题创建样式。
根据内容调整列的大小。
用户可以双击列标题右侧的手柄,以调整列的大小以适应其内容。
说明
可以将 Width 属性设置为
Double.NaN
以产生相同的效果。选择行项目。
用户可以在 GridView中选择一个或多个项目。
如果要更改所选项目的 Style,请参阅 使用触发器设置 ListView中的选定项样式。
滚动以查看最初在屏幕上不可见的内容。
如果 GridView 的大小不足以显示所有项,则用户可以使用 ScrollViewer 控件提供的滚动条水平或垂直滚动。 如果内容在某个特定方向全部可见,则 ScrollBar 将隐藏。 列标题不使用垂直滚动条滚动,而是水平滚动。
通过单击列标题按钮与列交互。
当用户单击列标题按钮时,如果提供了排序算法,他们可以对列中显示的数据进行排序。
可以处理列标题按钮的 Click 事件,以提供排序算法等功能。 若要处理单个列标题的 Click 事件,请对 GridViewColumnHeader设置事件处理程序。 要为所有列标题设置处理 Click 事件的事件处理程序,请在 ListView 控件上进行设置。
获取其他自定义视图
派生自 ViewBase 抽象类的 GridView 类只是 ListView 类的可能视图模式之一。 可以通过从 ViewBase 类派生来为 ListView 创建其他自定义视图。 有关自定义视图模式的示例,请参阅 为 ListView创建自定义视图模式。
GridView 支持类
以下类支持 GridView 视图模式。