wpf - TabNavigation 选择 ListBox 的第一项

标签 wpf listbox tabstop keyboard-navigation

我们为那些不想或不能使用鼠标的人使用选项卡导航。

当我通过选项卡导航到列表框时,第一个项目将被聚焦但不会被选中。当我再次点击时,第二个项目也将被选择。对我来说这是一种奇怪的行为。

如何才能同时选择选项卡焦点上的第一项?

谢谢!

<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

最佳答案

通常,用户不会期望制表键修改当前选择:他们通过 Tab 键来聚焦不同的控件,然后使用箭头键和/或空格选择项目。这似乎是 WPF 的 ListBox 实现中的一个错误,KeyboardNavigation.TabNavigation="Continue" 不仅修改当前的键盘焦点,而且还选择一个项目。

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

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

关于wpf - TabNavigation 选择 ListBox 的第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55899124/

相关文章:

WPF Datagrid 组扩展文本 - 如何绑定(bind)?

c# - WPF - 增加现有样式的滚动条宽度

WPF:如何在不同时禁用箭头键导航的情况下禁用选项卡导航?

c - 我需要帮助来理解 C Programming Language 书中练习 5-12 的要求

.net - 列表框数据虚拟化和多选

c# - 如何从列表框中选择的项目中获取特定属性

wpf - WPF ListBoxItem选择问题

Android - 如何将列表框实现为模态对话框/弹出窗口

wpf - 在 WPF 数据网格中的列之间禁用制表位

c# - 如何在应用程序中禁用 Aero Snap?