【发布时间】:2019-10-16 22:24:28
【问题描述】:
根据Event for when KeyboardNavigation.TabNavigation Cycle occurs 的回答,首选解决方案是添加不可见控件作为Detail 焦点范围的最后一个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 的实际内容是动态生成的。
【问题讨论】: