我在 WPF4 中的 DataGridTemplateColumn 的编辑模板中使用 WPF 工具包中的 AutoCompleteBox。一旦我解决了围绕 DataGrid 绑定的所有琐碎绑定问题以及 AutoCompleteBox 自己的陷阱和不完整性,它在大多数情况下都运行良好。到现在为止还挺好。问题是键盘导航。
这是场景:有一个包含两列的 DataGrid。第一个是 DataGridTemplateColumn,它的编辑模板中有一个 AutoCompleteBox。第二个只是一个普通的DataGridTextColumn。
如果我调用行的编辑,我可以在 AutoCompleteBox 中选择一个项目。我按 Tab 键移动到下一列,但行编辑被提交,并且键盘焦点不会移动到下一列。如果这是一个 DataGridTextColumn,它将保持编辑模式并让我编辑下一列。这也发生在新行上。
在我看来,当 WPF 从自动完成框出来时,它决定发送键盘焦点的位置似乎有问题,但我不知道我能做些什么,我也找不到任何人都在谈论同样的问题,这表明要么我做错了什么,要么没有其他人关心通过他们的网格进行键盘导航。我一直在使用 TemplateColumn 子类,它覆盖 PrepareCellForEditing 以确保焦点在编辑单元格时立即落在 AutoCompleteBox 中(根据此处的其他答案),但如果我禁用所有代码,问题仍然存在,所以它不是那一点的影响据我所知,诡计。
有任何想法吗?
XAML 看起来或多或少像这样(简化的,当然,网格不止两列,还有一些相当复杂的数据绑定正在进行 - 我省略了绑定并将其保留在整体结构中)。
<DataGrid>
<DataGridTemplateColumn Header="AutoCompleteBox">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate><TextBlock /></DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<toolkit:AutoCompleteBox>
<!-- autocompletebox's item template etc. -->
</toolkit:AutoCompleteBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Text" />
</DataGrid>