DataGrid 控件中的调整大小选项

可以使用各种选项来控制 DataGrid 自己调整大小的方式。 可以将 DataGrid 以及 DataGrid 中的各个行和列设置为根据其内容自动调整大小,也可以设置为特定值。 默认情况下,DataGrid 会根据其内容的大小增大和收缩。

调整 DataGrid 大小

使用自动调整大小时的注意事项

默认情况下,DataGridHeightWidth 属性设置为 Double.NaN(在 XAML 中为“Auto”),DataGrid 将根据其内容的大小进行调整。

当放置在不限制其子项大小的容器(例如 CanvasStackPanel)内时,DataGrid 将超出容器的可见边界,并且不会显示滚动条。 此状况可能会影响可用性和性能。

绑定到数据集时,如果 DataGridHeight 不受限制,它将继续为绑定数据集中的每个数据项添加一行。 这可能会导致在添加行时 DataGrid 超出应用程序的可见边界。 在这种情况下,DataGrid 将不会显示滚动条,因为它的 Height 将继续延伸以适应新行。

针对 DataGrid 中的每一行,会创建一个对象。 如果你使用的是大型数据集并且允许 DataGrid 自动调整自身大小,创建大量对象则可能会影响应用程序的性能。

为避免在处理大型数据集时出现这些问题,建议专门设置 DataGridHeight 或将它放置在将限制其 Height 的容器中,例如 Grid。 当 Height 受到限制时,DataGrid 将仅创建适合其指定 Height 的行,并且将根据需要回收这些行以显示新数据。

设置 DataGrid 大小

可以将 DataGrid 设置为在指定边界内自动调整大小,也可以将 DataGrid 设置为特定大小。 下表显示了用于控制 DataGrid 大小可以设置的属性。

properties 说明
Height 设置 DataGrid 的特定高度。
MaxHeight 设置 DataGrid 高度的上限。 DataGrid 将垂直延伸,直到达到此高度。
MinHeight 设置 DataGrid 高度的下限。 DataGrid 将垂直收缩,直到达到此高度。
Width 设置 DataGrid 的特定宽度。
MaxWidth 设置 DataGrid 宽度的上限。 DataGrid 将水平延伸,直到达到此宽度。
MinWidth 设置 DataGrid 宽度的下限。 DataGrid 将水平收缩,直到达到此宽度。

调整行和行标题的大小

DataGrid 行

默认情况下,DataGrid 行的 Height 属性设置为 Double.NaN(在 XAML 中为“Auto”),并且行高将根据其内容大小扩展。 可以通过设置 DataGrid.RowHeight 属性来指定 DataGrid 中所有行的高度。 用户可以拖动行标题分隔符来更改行高。

DataGrid 行标题

若要显示行标题,必须将 HeadersVisibility 属性设置为 DataGridHeadersVisibility.RowDataGridHeadersVisibility.All。 行标题默认将会显示,并且它们会根据其内容自动调整大小。 可以通过设置 DataGrid.RowHeaderWidth 属性来赋予行标题特定宽度。

调整列和列标题的大小

DataGrid 列

DataGrid 使用 DataGridLengthDataGridLengthUnitType 结构的值来指定绝对或自动调整大小模式。

下表显示了 DataGridLengthUnitType 结构提供的值。

名称 描述
Auto 默认的自动调整大小模式根据单元格和列标题的内容来调整 DataGrid 列的大小。
SizeToCells 基于单元格的自动调整大小模式根据列中单元格(不包括列标题)的内容来调整 DataGrid 列的大小。
SizeToHeader 基于标题的自动调整大小模式仅根据列标题的内容来调整 DataGrid 列的大小。
Pixel 基于像素的调整大小模式根据所提供的数值来调整 DataGrid 列的大小。
Star 比例缩放模式用于按加权比例分配可用空间。

在 XAML 中,star 值表示为 n*,其中 n 表示数值。 1* 等效于 *。 例如,如果 DataGrid 中有两列宽度为 * 和 2*,那么第一个列将获得一部分的可用空间,第二列将获得两部分的可用空间。

DataGridLengthConverter 类可用于在数值或字符串值与 DataGridLength 值之间转换数据。

默认情况下,DataGrid.ColumnWidth 属性设置为 SizeToHeaderDataGridColumn.Width 属性设置为 Auto。当调整大小模式设置为 AutoSizeToCells 时,列将扩展到其最宽可见内容的宽度。 滚动时,如果滚动到查看范围中的内容超过了当前列的大小,那么这些大小调整模式将使列扩大。 在此内容滚动到查看范围之外后,此列也不会收缩。

还可以将 DataGrid 中的列设置为仅在指定边界内自动调整大小,或者可以将列设置为特定大小。 下表显示了用于控制列的大小可以设置的属性。

properties 说明
DataGrid.MaxColumnWidth 设置 DataGrid 中所有列的上界限。
DataGridColumn.MaxWidth 设置单个列的上界限。 重写 DataGrid.MaxColumnWidth
DataGrid.MinColumnWidth 设置 DataGrid 中所有列的下界限。
DataGridColumn.MinWidth 设置单个列的下界限。 重写 DataGrid.MinColumnWidth
DataGrid.ColumnWidth 设置 DataGrid 中所有列的特定宽度。
DataGridColumn.Width 设置单个列的特定宽度。 重写 DataGrid.ColumnWidth

DataGrid 列标题

默认将显示 DataGrid 列标题。 若要隐藏列标题,必须将 HeadersVisibility 属性设置为 DataGridHeadersVisibility.RowDataGridHeadersVisibility.None。 默认情况下,当显示列标题时,它们会根据其内容自动调整大小。 可以通过设置 DataGrid.ColumnHeaderHeight 属性来赋予列标题特定高度。

使用鼠标调整大小

用户可以拖动行或列标题分隔符来调整 DataGrid 行和列的大小。 DataGrid 还支持通过双击行或列标题分隔符来实现自动调整行和列的大小。 若要防止用户调整特定列的大小,对于各个列,请将 DataGridColumn.CanUserResize 属性设置为 false。 若要防止用户调整所有列的大小,请将 DataGrid.CanUserResizeColumns 属性设置为 false。 若要防止用户调整所有行的大小,请将 DataGrid.CanUserResizeRows 属性设置为 false

另请参阅