通过


GridView 概述

GridView 视图模式是 ListView 控件的视图模式之一。 类 GridView 及其支持类使你和你的用户能够在通常使用按钮作为交互式列标题的表中查看项集合。 本主题介绍该 GridView 类并概述其用法。

什么是 GridView 视图?

视图 GridView 模式通过将数据字段绑定到列,并显示列标题以识别字段,从而显示数据项的列表。 默认 GridView 样式将按钮实现为列标题。 通过使用列标题的按钮,可以实现重要的用户交互功能:例如,用户可以单击列标题,根据特定列的内容对数据进行排序 GridView

注释

用于列标题的按钮控件 GridView 派生自 ButtonBase

下图显示了 ListViewGridView 内容视图。

显示 ListView 的屏幕截图,其中显示了显示文件信息的 GridView 输出。

GridView 列由 GridViewColumn 对象表示,这些对象可以自动调整其内容的大小。 (可选)可以明确将 GridViewColumn 设置为特定宽度。 可以通过在列标题之间拖动控制手柄来调整列的大小。 还可以动态添加、删除、替换和重新排序列,因为此功能内置于 GridView此中。 但是, GridView 无法直接更新它显示的数据。

以下示例演示如何定义 GridView 显示员工数据。 在此示例中,ListViewEmployeeInfoDataSource定义为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 布局和样式

列单元格和列标题 GridViewColumn 的宽度相同。 默认情况下,每列的宽度自动调整以适应其内容。 (可选)可以将列设置为固定宽度。

相关数据内容以水平行显示。 例如,在上图中,每个员工的姓氏、名字和 ID 编号都显示为集,因为它们显示在水平行中。

在 GridView 中定义和设置列样式

当定义要在GridViewColumn中显示的数据字段时,请使用DisplayMemberBindingCellTemplateCellTemplateSelector属性。 该 DisplayMemberBinding 属性优先于任一模板属性。

若要指定列 GridView的内容对齐方式,请定义一个 CellTemplate。 不要将HorizontalContentAlignmentVerticalContentAlignment属性用于通过GridView显示的ListView内容。

若要指定列标题的模板和样式属性,请使用GridViewGridViewColumnGridViewColumnHeader类。 有关详细信息,请参阅 GridView 列标题样式和模板概述

将视觉元素添加到 GridView

若要将视觉元素(如 CheckBoxButton 控件)添加到 GridView 视图模式,请使用模板或样式。

如果将视觉对象元素显式定义为数据项,则它只能在一次 GridView中显示。 存在此限制,因为元素只能有一个父元素,因此只能在可视化树中出现一次。

在 GridView 中设置行样式

使用GridViewRowPresenterGridViewHeaderRowPresenter类来格式化和显示GridView的行。 有关如何在视图模式下设置行 GridView 样式的示例,请参阅 实现 GridView 的 ListView 中的行样式。

使用 ItemContainerStyle 时的对齐问题

若要防止列标题和单元格之间的对齐问题,请不要设置属性或指定模板来影响 ItemContainerStyle 中项目的宽度。 例如,不要设置Margin属性,也不要指定ControlTemplate,将CheckBox添加到ListView控件上定义的ItemContainerStyle中。 而是在定义 GridView 视图模式的类上指定直接影响列宽的属性和模板。

例如,若要在 GridView 视图模式下向行添加 CheckBox,请在 DataTemplate 中添加 CheckBox,然后将 CellTemplate 属性设置为该 DataTemplate

与 GridView 的用户交互

在应用程序中使用 GridView 时,用户可以与之交互并修改其 GridView格式设置。 例如,用户可以对列重新排序、调整列大小、选择表格中的项,以及滚动浏览内容。 还可以定义当用户单击列标题按钮时响应的事件处理程序。 事件处理程序可以执行操作,例如根据列的内容对GridView中显示的数据进行排序。

以下列表更详细地讨论了使用 GridView 进行用户交互的能力:

  • 使用拖放方法对列重新排序。

    用户可以在列标题上方按鼠标左键对列 GridView 重新排序,然后将该列拖动到新位置。 当用户拖动列标题时,会显示一个浮动的标题版本,以及一条实心黑线用于指示插入列的位置。

    如果您想修改标头浮动版本的默认样式,请指定一个ControlTemplate,用于GridViewColumnHeader类型,当属性设置为Role时触发,且该设置为Floating。 有关详细信息,请参阅 为拖动的 GridView 列标题创建样式

  • 调整列以适应内容。

    用户可以双击列标题右侧的手柄,以调整列的大小以适应其内容。

    注释

    可以将属性 Width 设置为 Double.NaN 生成相同的效果。

  • 选择行项。

    用户可以在 GridView 中选择一个或多个项目。

    如果要更改所选项的 Style,请参阅 使用触发器设置 ListView 中选定项的样式

  • 滚动以查看最初在屏幕上不可见的内容。

    如果大小 GridView 不足以显示所有项,则用户可以使用控件提供的 ScrollViewer 滚动条水平或垂直滚动。 如果所有内容在特定方向上都可见,那么 A ScrollBar 会被隐藏。 列标题不使用垂直滚动条滚动,而是水平滚动。

  • 通过单击列标题按钮与列进行交互。

    当用户单击列标题按钮时,如果提供了排序算法,他们可以对列中显示的数据进行排序。

    可以处理 Click 列标题按钮的事件,以提供排序算法等功能。 为了处理Click单个列标题的事件,请在GridViewColumnHeader上设置一个事件处理程序。 若要为所有列标题的 Click 事件设置事件处理程序,请在 ListView 控件上设置处理程序。

获取其他自定义视图

GridView 类派生自 ViewBase 抽象类,只是类的可能视图模式 ListView 之一。 可以通过从ListView类派生来创建ViewBase其他自定义视图。 有关自定义视图模式的示例,请参阅 为 ListView 创建自定义视图模式

GridView 支持类

以下类支持 GridView 视图模式。

样式和模板

可以通过修改 GridView 栏的样式和模板来自定义列标题的外观。 本部分讨论用于在 GridView 控件的视图模式下自定义列标题的属性的 ListView 优先级顺序。 有关详细信息,请参阅什么是样式和模板?以及如何为控件创建模板

自定义 GridView 中的列标题

可以在许多相关类中找到定义列标题 GridView 的内容、布局和样式的属性。 其中一些属性具有类似或相同的功能。

下表中的行显示执行相同函数的属性组。 可以使用这些属性自定义 GridView 中的列标题。 相关属性的优先级顺序从右到左,最右边列中的属性具有最高优先级。 例如,如果在GridViewColumnHeader对象上设置了ContentTemplate,并在关联的GridViewColumnHeaderTemplateSelector上设置了ContentTemplate,则ContentTemplate优先。 在此情形下,HeaderTemplateSelector 不起作用。

GridView 中列标题的相关属性

GridView GridViewColumn GridViewColumnHeader
上下文菜单属性 ColumnHeaderContextMenu 不適用 ContextMenu
提示

性能
ColumnHeaderToolTip 不適用 ToolTip
标头模板

性能
ColumnHeaderTemplate 1/

ColumnHeaderTemplateSelector
HeaderTemplate 1/

HeaderTemplateSelector
ContentTemplate 1/

ContentTemplateSelector
样式属性 ColumnHeaderContainerStyle HeaderContainerStyle Style

1对于 标头模板属性,如果同时设置模板和模板选择器属性,则模板属性优先。 例如,如果同时设置 ContentTemplate 属性和 ContentTemplateSelector 属性,则属性 ContentTemplate 优先。

另请参阅