在焦点和键盘导航方面,我发现了一些奇怪的行为。在下面的示例中,我有一个简单的ItemsControl,它已经被模板化以呈现一个与ItemsSource绑定的CheckBox列表。
<ItemsControl FocusManager.IsFocusScope="True"
ItemsSource="{Binding ElementName=TheWindow, Path=ListOStrings}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
由于某种奇怪的原因,FocusManager.IsFocusScope="True" 的赋值导致使用鼠标单击复选框时无法设置键盘焦点,并且在使用空格键选中复选框时焦点跳出ItemsControl。这两个症状似乎都指向当复选框被选中时发生了一些奇怪的导航,但我很难找到问题的根源。
如果我使用此方法将视觉树中的任何父级元素设置为焦点范围,则会出现此问题。如果我删除FocusManager.IsFocusScope="True",那么问题就消失了。不幸的是,在一个更大的项目中,我看到这个问题,我不能只删除这些焦点范围而不担心其他与焦点相关的后果。
有人能解释一下我看到的奇怪行为吗?这是一个 bug 还是我完全没有理解它?