首页 文章

WPF网格中的键盘导航

提问于
浏览
2

假设您有一个StackPanel,它包含一个ScrollViewer,它包含另一个StackPanel,其ItemsControl带有一个绑定的ItemsSource . 此ItemsSource绑定到在运行时创建的网格集合 . 每个网格都包含一个标签和一个文本框/组合框/一些复选框,这些复选框在StackPanel中都有唯一的TabIndex值 . 这是xaml:

<ScrollViewer Name="scrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
  <StackPanel Name="stackPanel" MinWidth="500" Width="Auto">
    <ItemsControl Name="itemsControl"                          ItemsSource="{Binding ElementName=SomeWindow, Path=GridsCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
  </StackPanel>
</ScrollViewer>

我想简单地从一个控件到下一个控件,但仅限于网格集合中网格中的控件 . 到目前为止,我已经尝试了不同的KeyboardNavigation.TabNavigation设置,但没有任何运气 . 做这个的最好方式是什么?

2 回答

  • 1

    为每个想要表现的容器设置 TabNavigationKeyboardNavigationMode.Cycle,因此只要您使用Tab和Shift选项卡,焦点就不会转义它:

    KeyboardNavigation.SetTabNavigation(grid1, KeyboardNavigationMode.Cycle);
    

    如果要更改Ctrl Tab行为,请使用KeyboardNavigation.SetControlTabNavigation .

  • 2

    您可以应用隐式样式来禁用每个Control的Tab键,然后重新启用它以获得您想要的选项卡:

    <ScrollViewer Name="scrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
      <ScrollViewer.Resources>
          <Style TargetType="Control">
              <Setter Property="IsTabStop" Value="False" />
          </Style>
      </ScrollViewer.Resources>
      <StackPanel Name="stackPanel" MinWidth="500" Width="Auto">
        <ItemsControl Name="itemsControl"                          
                      ItemsSource="{Binding ElementName=SomeWindow, Path=GridsCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
      </StackPanel>
    </ScrollViewer>
    

    不要忘记将动态生成的网格上的IsTabStop设置为True

相关问题