Я использую AutoCompleteBox из WPF Toolkit внутри шаблона редактирования DataGridTemplateColumn в WPF4.По большей части это работает достаточно хорошо, как только я разобрался со всеми проблемами связывания с привязкой DataGrid, а также с собственными ошибками и неполнотой AutoCompleteBox.Все идет нормально.Проблема заключается в навигации по клавиатуре.
Это сценарий: существует DataGrid с двумя столбцами.Первый - это DataGridTemplateColumn, в котором в шаблоне редактирования есть AutoCompleteBox.Второй - просто обычный DataGridTextColumn.
Если я вызову редактирование строки, я могу выбрать элемент в AutoCompleteBox.Я нажимаю клавишу табуляции, чтобы перейти к следующему столбцу, но вместо этого редактируется строка, и фокус клавиатуры не перемещается к следующему столбцу.Если бы это был DataGridTextColumn, он остался бы в режиме редактирования и позволил бы мне редактировать следующий столбец.Это также происходит с новыми строками.
По-моему, что-то не так с тем, когда WPF решает отправить фокус клавиатуры, когда он выходит из Autocompletebox, но я не могу понять, что я могу сделатьоб этом, и я также не смог найти никого, кто бы говорил об этой же проблеме, что говорит о том, что я либо делаю что-то не так, либо никого больше не волнует клавиатурная навигация по их сеткам.Я использую подкласс 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>