TabNavigation选择ListBox的第一项

时间:2019-04-29 07:57:03

标签: wpf listbox tabstop keyboard-navigation

我们正在为不想要或不能使用鼠标的人们使用导航。

当我通过标签导航到列表框时,第一个项目将集中显示但未选中。当我再次按Tab时,也会选择第二项。对我来说,这是一种奇怪的行为。

如何也可以选择标签焦点上的第一项?

谢谢!

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <TextBox Text="Focus"/>
        <ListBox Grid.Row="1" KeyboardNavigation.TabNavigation="Continue">
            <ListBoxItem Content="Test1"/>
            <ListBoxItem Content="Test2"/>
            <ListBoxItem Content="Test3"/>
        </ListBox>
</Grid>

1st step

2nd step

3rd step

1 个答案:

答案 0 :(得分:1)

通常,用户不会期望制表键会修改当前选择:他们会四处查看以聚焦不同的控件,然后使用箭头键和/或空格选择项目。 WPF的ListBox实现中似乎有一个错误,KeyboardNavigation.TabNavigation="Continue"不仅修改了当前的Keyboard Focus,而且还选择了一个项目。

如果您仍然希望选择重点突出的项目,则可以在列表框中添加事件处理程序(或相应的行为):

private void OnListBoxGotFocus(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource is ListBoxItem listBoxItem)
    {
        listBoxItem.IsSelected = true;
    }
}