假设您有一个stackpanel,其中包含一个scrollviewer,其中包含另一个带有bount obind ockitssource的itemscontrol的stackpanel。此项目源与在运行时创建的网格集合绑定。每个网格都包含一个标签和一个文本框/combobox/几个复选框,这些复选框都在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>
我只想从一个控件到另一个控件,而仅在网格集合中的网格中的控件中。到目前为止,我已经尝试了不同的键盘Navigation.tabnavigation设置,但没有任何运气。什么是最好的方法?
将TabNavigation
设置为KeyboardNavigationMode.Cycle
的每个容器,您想要这样的操作,因此,只要您使用 tab> tab 和,焦点就不会逃脱它shift tab :
KeyboardNavigation.SetTabNavigation(grid1, KeyboardNavigationMode.Cycle);
如果要更改 ctrl tab 行为,请使用KeyboardNavigation.SetControlTabNavigation
。
您可以应用一个隐式样式,该样式可禁用每个控件,然后将其重新启用,以便您想要的标签:
<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>
不要忘记将动态生成的网格设置为true