DataGrid 控件中的默认键盘和鼠标行为
本主题介绍用户如何使用键盘和鼠标与 DataGrid 控件进行交互。
与 DataGrid 的典型交互包括导航、选择和编辑。 选择行为受 SelectionMode 和 SelectionUnit 属性的影响。 导致本主题所述行为的默认值是 DataGridSelectionMode.Extended 和 DataGridSelectionUnit.FullRow。 更改这些值可能会导致行为与描述不同。 单元格处于编辑模式时,编辑控件可能会覆盖 DataGrid 的标准键盘行为。
默认键盘行为
下表列出了 DataGrid 的默认键盘行为。
键或组合键 | 说明 |
---|---|
向下键 | 将焦点移至当前单元格正下方的单元格。 如果焦点在最后一行,则按向下箭头不执行任何操作。 |
向上键 | 将焦点移至当前单元格正上方的单元格。 如果焦点在第一行,则按向上箭头不执行任何操作。 |
向左键 | 将焦点移至行中的上一个单元格。 如果焦点在行中的第一个单元格,则按向左箭头不执行任何操作。 |
向右键 | 将焦点移至行中的下一个单元格。 如果焦点在行中的最后一个单元格,则按向右箭头不执行任何操作。 |
Home | 将焦点移至当前行中的第一个单元格。 |
End | 将焦点移至当前行中的最后一个单元格。 |
Page Down | 如果行未分组,则按完全显示的行数向下滚动控件。 在不更改列的情况下,将焦点移至最后一个完全显示的行。 如果行已分组,则在不更改列的情况下,将焦点移至 DataGrid 中的最后一行。 |
Page Up | 如果行未分组,则按完全显示的行数向上滚动控件。 在不更改列的情况下,将焦点移至显示的第一行。 如果行已分组,则在不更改列的情况下,将焦点移至 DataGrid 中的第一行。 |
Tab | 将焦点移至当前行中的下一个单元格。 如果焦点位于该行的最后一个单元格,则将焦点移至下一行的第一个单元格。 如果焦点位于控件中的最后一个单元格,则将焦点移至父容器的 Tab 键顺序中的下一个控件。 如果当前单元格处于编辑模式并且按 TAB 使焦点从当前行移开,则在焦点更改之前会提交对该行所做的任何更改。 |
Shift+Tab | 将焦点移至当前行中的上一个单元格。 如果焦点已经位于该行的第一个单元格,则将焦点移至上一行的最后一个单元格。 如果焦点位于控件中的第一个单元格,则将焦点移至父容器的 Tab 键顺序中的上一个控件。 如果当前单元格处于编辑模式并且按 TAB 使焦点从当前行移开,则在焦点更改之前会提交对该行所做的任何更改。 |
CTRL + 向下箭头 | 将焦点移至当前列中的最后一个单元格。 |
CTRL + 向上箭头 | 将焦点移至当前列中的第一个单元格。 |
Ctrl+向右键 | 将焦点移至当前行中的最后一个单元格。 |
Ctrl+向左键 | 将焦点移至当前行中的第一个单元格。 |
Ctrl+Home | 将焦点移至控件中的第一个单元格。 |
Ctrl+End | 将焦点移至控件中的最后一个单元格。 |
Ctrl+PAGE DOWN | 与 PAGE DOWN 相同。 |
Ctrl+PAGE UP | 与 PAGE UP 相同。 |
F2 | 如果当前列的 DataGrid.IsReadOnly 属性为 false 且 DataGridColumn.IsReadOnly 属性为 false ,则将当前单元格置于单元格编辑模式。 |
Enter | 提交对当前单元格和行的任何更改,并将焦点移至当前单元格正下方的单元格。 如果焦点在最后一行,则在不移动焦点的情况下提交所有更改。 |
ESC | 如果控件处于编辑模式,则取消编辑并还原在控件中所做的所有更改。 如果基础数据源实现 IEditableObject,则再次按 ESC 将取消整行的编辑模式。 |
Backspace | 编辑单元格时删除光标前的字符。 |
DELETE | 编辑单元格时删除光标后的字符。 |
Ctrl+Enter | 在不移动焦点的情况下,提交对当前单元格所做的任何更改。 |
CTRL + A | 如果 SelectionMode 设置为 Extended,则选择 DataGrid 中的所有行。 |
选择键
如果 SelectionMode 属性设置为 Extended,则导航行为不会改变,但在按下 SHIFT(包括 CTRL+SHIFT)的同时使用键盘导航将修改多行选定内容。 导航开始前,控件将当前行标记为定位行。 如果在按下 Shift 的同时进行导航,所选内容将包括定位行和当前行之间的所有行。
以下选择键可修改多行选定内容。
SHIFT + 向下键
SHIFT + 向上键
SHIFT + Page Down
SHIFT + PAGE UP
Ctrl+Shift+向下键
Ctrl+Shift+向上键
Ctrl+Shift+Home
Ctrl+Shift+End
默认鼠标行为
下表列出了 DataGrid 的默认鼠标行为。
鼠标操作 | 说明 |
---|---|
单击未选中的行 | 将单击的行设置为当前行,并将单击的单元格设置为当前单元格。 |
单击当前单元格 | 将当前单元格置于编辑模式下。 |
拖动列标头单元格 | 如果当前列的 DataGrid.CanUserReorderColumns 属性为 true 且 DataGridColumn.CanUserReorder 属性为 true ,则移动该列,将其拖放到新位置。 |
拖动列标头分隔符 | 如果当前列的 DataGrid.CanUserResizeColumns 属性为 true 且 DataGridColumn.CanUserResize 属性为 true ,则调整该列的大小。 |
双击列标头分隔符 | 如果当前列的 DataGrid.CanUserResizeColumns 属性为 true 且 DataGridColumn.CanUserResize 属性为 true ,则使用 Auto 大小调整模式自动调整该列大小。 |
单击列标头单元格 | 如果当前列的 DataGrid.CanUserSortColumns 属性为 true 且 DataGridColumn.CanUserSort 属性为 true ,则对该列进行排序。单击已排序的列的标头会反转该列的排序方向。 单击多个列标头的同时按下 SHIFT 键会按单击的顺序对多个列进行排序。 |
对行进行 CTRL+click 操作 | 如果 SelectionMode 设置为 Extended,则修改非连续的多行选定内容。 如果该行已选中,则取消选中该行。 |
对行进行 SHIFT+click 操作 | 如果 SelectionMode 设置为 Extended,则修改连续的多行选定内容。 |
单击行组标头 | 展开或折叠组。 |
单击 DataGrid 左上角的“全选”按钮 | 如果 SelectionMode 设置为 Extended,则选择 DataGrid 中的所有行。 |
鼠标选择
如果 SelectionMode 属性设置为 Extended,则在按下 CTRL 或 SHIFT 的同时单击某一行将修改多行选定内容。
如果在按下 CTRL 的同时单击某一行,该行将更改其选择状态,而所有其他行保持其当前选择状态。 执行此操作可选择不相邻的行。
按下 SHIFT 的同时单击某一行时,所选内容包括当前行与定位行(单击前当前行所在行)之间的所有行。 按下 SHIFT 时的后续单击会更改当前行,但不会更改定位行。 执行此操作可选择相邻行范围。
可以结合使用 CTRL+SHIFT 选择相邻行的不相邻范围。 若要实现这一点,则如前所述,使用 SHIFT+click 选择第一个范围。 选择第一个行范围后,使用 CTRL+click 选择下一个范围中的第一行,然后在按下 CTRL+SHIFT 的同时单击下一个范围中的最后一行。