本主题说明用户如何使用键盘和鼠标与 DataGrid 控件进行交互。
与 DataGrid 的典型交互包括导航、选择和编辑。 选择行为受 SelectionMode 属性和 SelectionUnit 属性影响。 导致本主题中所述行为的默认值为 DataGridSelectionMode.Extended 和 DataGridSelectionUnit.FullRow。 更改这些值可能会导致行为与所述行为不同。 当单元格处于编辑模式时,编辑控件可能会改变该单元格的标准键盘操作方式 DataGrid。
默认键盘行为
下表列出了 DataGrid 的默认键盘行为。
| 键或组合键 | DESCRIPTION |
|---|---|
| 向下键 | 将焦点移到当前单元格的正下方单元格。 如果焦点在最后一行,按向下箭头键没有效果。 |
| 向上键 | 将焦点从当前单元格移动到其上方的单元格。 如果焦点位于第一行,按向上箭头键不会执行任何操作。 |
| 向左键 | 将焦点移动到行中的上一个单元格。 如果焦点位于行的第一个单元格中,按下左箭头键不会执行任何动作。 |
| 右箭头 | 将焦点移动到行中的下一个单元格。 如果焦点位于行的最后一个单元格中,按右箭头将不起任何作用。 |
| 首页 | 将焦点移动到当前行中的第一个单元格。 |
| 结束 | 将焦点移动到当前行中的最后一个单元格。 |
| Page Down | 如果未对行进行分组,则按完全显示的行数向下滚动控件。 将焦点移至最后一个完整显示的行,不更改列。 如果对行进行分组,则将焦点移动到 DataGrid 中分组的最后一行,而不更改列。 |
| Page Up | 如果未对行进行分组,则按完全显示的行数向上滚动控件。 将焦点移动到第一个显示的行,而不更改列。 如果对行进行分组,将焦点移到第DataGrid行,而列不改变。 |
| Tab | 将焦点移动到当前行中的下一个单元格。 如果焦点位于行的最后一个单元格中,将焦点移动到下一行中的第一个单元格。 如果焦点位于控件的最后一个单元格中,将焦点移动到父容器的 Tab 键顺序中的下一个控件。 如果当前单元格处于编辑模式,按下 Tab 键会使焦点移出当前行,则在更改焦点之前,行所做的任何更改都会被提交。 |
| Shift+Tab | 将焦点移动到当前行中的前一个单元格。 如果焦点已位于行的第一个单元格中,将焦点移动到上一行的最后一个单元格。 如果焦点位于控件的第一个单元格中,将焦点移动到父容器的 Tab 键顺序中的上一个控件。 如果当前单元格处于编辑模式,按下 Tab 键会使焦点移出当前行,则在更改焦点之前,行所做的任何更改都会被提交。 |
| CTRL+下箭头键 | 将焦点移动到当前列中的最后一个单元格。 |
| CTRL+上箭头 | 将焦点移动到当前列中的第一个单元格。 |
| Ctrl+向右键 | 将焦点移动到当前行中的最后一个单元格。 |
| Ctrl+向左键 | 将焦点移动到当前行中的第一个单元格。 |
| Ctrl+HOME | 将焦点移动到控件中的第一个单元格。 |
| Ctrl+结束 | 将焦点移动到控件中的最后一个单元格。 |
| Ctrl+PAGE DOWN | 与 PAGE DOWN 相同。 |
| Ctrl+PAGE UP | 与 PAGE UP 相同。 |
| F2 | 如果当前列的DataGrid.IsReadOnly属性为false并且当前列的DataGridColumn.IsReadOnly属性为false,则将当前单元格置于单元格编辑模式。 |
| Enter | 提交对当前单元格和行所做的任何更改,并将焦点移动到当前单元格正下方的单元格。 如果焦点位于最后一行,则会在不移动焦点的情况下提交所有更改。 |
| ESC | 如果控件处于编辑模式,请取消编辑并还原控件中所做的任何更改。 如果基础数据源实现 IEditableObject,则再次按 ESC 会取消整个行的编辑模式。 |
| Backspace | 编辑单元格时,删除光标前的字符。 |
| 删除 | 编辑单元格时,删除光标后面的字符。 |
| 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 的默认鼠标操作。
| 鼠标作 | DESCRIPTION |
|---|---|
| 单击未选择的行 | 将单击的行指定为当前行,并将单击的单元格指定为当前单元格。 |
| 单击当前单元格 | 将当前单元格置于编辑模式。 |
| 拖动列标题单元格 | 如果当前列的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+单击行 | 如果 SelectionMode 设置为 Extended,则修改非连续多行选择。 如果该行已被选择,则取消对该行的选择。 |
| 按住SHIFT+单击某一行 | 如果 SelectionMode 设置为 Extended,则修改连续的多行选择。 |
| 单击行组标题 | 展开或折叠组。 |
| 单击 DataGrid 左上角的“全选”按钮 | 如果 SelectionMode 设置为 Extended,则选择该 DataGrid行中的所有行。 |
鼠标选择
SelectionMode如果该属性设置为Extended,则按 Ctrl 或 SHIFT 时单击某一行将修改多行选择。
在按 Ctrl 的同时单击某行时,该行将更改其选择状态,而所有其他行将保留其当前选择状态。 这样做以选择非相邻行。
在按 Shift 的同时单击某行时,所选内容包括当前行与位于单击前当前行位置的定位行之间的所有行。 按住 Shift 键时,后续单击会更改当前行,但不会更改锚定行。 为此,请选择一系列相邻行。
CTRL+SHIFT 可以组合以选择相邻行的非相邻范围。 为此,请使用 SHIFT+单击选择第一个范围,如前所述。 选择第一个行范围后,使用 Ctrl+单击选择下一区域中的第一行,然后在按 Ctrl+SHIFT 的同时单击下一区域中的最后一行。