3

假设您有一个 StackPanel,其中包含一个 ScrollViewer,该 ScrollViewer 包含另一个 StackPanel,其中一个 ItemsControl 和一个绑定的 ItemsSource。此 ItemsSource 绑定到在运行时创建的 Grid 集合。每个 Grid 包含一个标签和一个文本框/组合框/几个复选框,它们在 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 设置,但没有任何运气。做这个的最好方式是什么?

4

2 回答 2

2

为您想要表现得像这样的每个容器设置TabNavigationKeyboardNavigationMode.Cycle,因此只要您使用Taband Shift+ ,焦点就不会逃脱它Tab

KeyboardNavigation.SetTabNavigation(grid1, KeyboardNavigationMode.Cycle);

如果您想更改Ctrl+Tab行为,请使用KeyboardNavigation.SetControlTabNavigation.

于 2012-11-09T20:34:11.447 回答
2

您可以应用一个隐式样式来禁用每个控件的选项卡,然后重新启用它以实现您想要的选项卡:

<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

于 2012-11-12T09:40:56.350 回答