我发现我的CheckBox和它的焦点/Tab键顺序有奇怪的行为。
首先是一些“工作”代码:
<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>如果您尝试这样做,Tab键顺序可以很好地工作-只要您不检查CheckBox。如果我检查CheckBox,它将失去焦点,下一次按tab键将焦点设置为按钮。
如果我删除FocusManager.IsFocusScope="True",一切都会正常工作。
我的问题是这个行为是想要的还是一个bug?
发布于 2013-01-11 19:52:41
这种行为在某种程度上是意料之中的。为了修复它,您可以在窗口上为GotFocus添加一个处理程序。
假设您的复选框名为chkBox,如下所示:
protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
base.OnGotKeyboardFocus(e);
if (e.Source == chkBox)
FocusManager.SetFocusedElement(this, chkBox);
}这个问题和一些类似的问题在this msdn thread中有更详细的讨论。
https://stackoverflow.com/questions/14275235
复制相似问题