В соответствии с ответом на Событие, когда происходит цикл KeyboardNavigation.TabNavigation , решение состоит в том, чтобы добавить невидимый элемент управления в качестве последнего TabIndex области фокуса детализации, обрабатывая GotFocus()
для этого фиктивного элемента,В рамках обработки этого «события» я хотел бы переместить фокус обратно в основную сетку MasterDG.Focus()
:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<DataGrid Name="MasterDG" ItemsSource="{Binding Items}" FocusManager.IsFocusScope="True"/>
<StackPanel Name="Detail" Grid.Row="1" FocusManager.IsFocusScope="True">
<TextBox/>
<TextBox/>
<TextBox/>
<Control Name="DummyControl"
GotFocus="DummyControl_GotFocus"/>
</StackPanel>
</Grid>
Обработчик событий
private void DummyControl_GotFocus(object sender, RoutedEventArgs e)
{
Save(); //save when done editing last element of detail
MasterDG.Focus();
}
Однако это вызывает не только MasterDG
быть сфокусированным, но также войти в режим редактирования на текущую ячейку и вставить символ \t
, перезаписывая содержимое любой ячейки. Как я могу исправить проблему?
Обратите внимание, что фактическое содержимое Detail генерируется динамически.