DataGrid 控件中的调整大小选项
可以使用各种选项来控制 DataGrid 自己调整大小的方式。 可以将 DataGrid 以及 DataGrid 中的各个行和列设置为根据其内容自动调整大小,也可以设置为特定值。 默认情况下,DataGrid 会根据其内容的大小增大和收缩。
调整 DataGrid 大小
使用自动调整大小时的注意事项
默认情况下,DataGrid 的 Height 和 Width 属性设置为 Double.NaN(在 XAML 中为“Auto
”),DataGrid 将根据其内容的大小进行调整。
当放置在不限制其子项大小的容器(例如 Canvas 或 StackPanel)内时,DataGrid 将超出容器的可见边界,并且不会显示滚动条。 此状况可能会影响可用性和性能。
绑定到数据集时,如果 DataGrid 的 Height 不受限制,它将继续为绑定数据集中的每个数据项添加一行。 这可能会导致在添加行时 DataGrid 超出应用程序的可见边界。 在这种情况下,DataGrid 将不会显示滚动条,因为它的 Height 将继续延伸以适应新行。
针对 DataGrid 中的每一行,会创建一个对象。 如果你使用的是大型数据集并且允许 DataGrid 自动调整自身大小,创建大量对象则可能会影响应用程序的性能。
为避免在处理大型数据集时出现这些问题,建议专门设置 DataGrid 的 Height 或将它放置在将限制其 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.Row 或 DataGridHeadersVisibility.All。 行标题默认将会显示,并且它们会根据其内容自动调整大小。 可以通过设置 DataGrid.RowHeaderWidth 属性来赋予行标题特定宽度。
调整列和列标题的大小
DataGrid 列
DataGrid 使用 DataGridLength 和 DataGridLengthUnitType 结构的值来指定绝对或自动调整大小模式。
下表显示了 DataGridLengthUnitType 结构提供的值。
名称 | 描述 |
---|---|
Auto | 默认的自动调整大小模式根据单元格和列标题的内容来调整 DataGrid 列的大小。 |
SizeToCells | 基于单元格的自动调整大小模式根据列中单元格(不包括列标题)的内容来调整 DataGrid 列的大小。 |
SizeToHeader | 基于标题的自动调整大小模式仅根据列标题的内容来调整 DataGrid 列的大小。 |
Pixel | 基于像素的调整大小模式根据所提供的数值来调整 DataGrid 列的大小。 |
Star | 比例缩放模式用于按加权比例分配可用空间。 在 XAML 中,star 值表示为 n*,其中 n 表示数值。 1* 等效于 *。 例如,如果 DataGrid 中有两列宽度为 * 和 2*,那么第一个列将获得一部分的可用空间,第二列将获得两部分的可用空间。 |
DataGridLengthConverter 类可用于在数值或字符串值与 DataGridLength 值之间转换数据。
默认情况下,DataGrid.ColumnWidth 属性设置为 SizeToHeader,DataGridColumn.Width 属性设置为 Auto。当调整大小模式设置为 Auto 或 SizeToCells 时,列将扩展到其最宽可见内容的宽度。 滚动时,如果滚动到查看范围中的内容超过了当前列的大小,那么这些大小调整模式将使列扩大。 在此内容滚动到查看范围之外后,此列也不会收缩。
还可以将 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.Row 或 DataGridHeadersVisibility.None。 默认情况下,当显示列标题时,它们会根据其内容自动调整大小。 可以通过设置 DataGrid.ColumnHeaderHeight 属性来赋予列标题特定高度。
使用鼠标调整大小
用户可以拖动行或列标题分隔符来调整 DataGrid 行和列的大小。 DataGrid 还支持通过双击行或列标题分隔符来实现自动调整行和列的大小。 若要防止用户调整特定列的大小,对于各个列,请将 DataGridColumn.CanUserResize 属性设置为 false
。 若要防止用户调整所有列的大小,请将 DataGrid.CanUserResizeColumns 属性设置为 false
。 若要防止用户调整所有行的大小,请将 DataGrid.CanUserResizeRows 属性设置为 false
。