假设您有一个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设置,但没有任何运气。这样做的最佳方式是什么?
答案 0 :(得分: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
答案 1 :(得分:1)
为每个想要表现的容器设置TabNavigation
到KeyboardNavigationMode.Cycle
,因此只要您使用 Tab 和,焦点就不会转义它移 + 标签:
KeyboardNavigation.SetTabNavigation(grid1, KeyboardNavigationMode.Cycle);
如果您想更改 Ctrl + Tab 行为,请使用KeyboardNavigation.SetControlTabNavigation
。