我看到CheckBox
及其焦点/标签顺序的奇怪行为。
首先是一些“工作”代码:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Button Grid.Row="0" Width="100" Height="25"/>
<TabControl Grid.Row="1" >
<!--TabItem Header="tabItem1" Name="tabItem1"-->
<TabItem Header="tabItem1" Name="tabItem1" FocusManager.IsFocusScope="True">
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" />
<TextBox Grid.Row="1"/>
<CheckBox Grid.Row="2" Content="Test" />
<TextBox Grid.Row="3"/>
</Grid>
</ScrollViewer>
</TabItem>
</TabControl>
</Grid>
如果您尝试这样做,只要您不检查CheckBox,Tab键顺序就可以正常工作。如果我检查CheckBox它会失去焦点,下一个标签按下会将焦点设置为按钮。
如果我删除FocusManager.IsFocusScope="True"
,一切正常。
我的问题是这个想要的行为还是一个错误?
答案 0 :(得分:4)
这种行为是以某种方式预期的。为了修复它,您可以在窗口上添加GotFocus的处理程序。
假设您的复选框名为chkBox,如下所示:
protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
base.OnGotKeyboardFocus(e);
if (e.Source == chkBox)
FocusManager.SetFocusedElement(this, chkBox);
}
中更详细地讨论了这个问题和一些类似的问题