Навигация по клавиатуре в сетках WPF
Предположим, что у вас есть StackPanel, которая содержит ScrollViewer, который содержит другую StackPanel с ItemsControl с привязанным ItemsSource. Этот ItemsSource привязан к коллекции сеток, созданных во время выполнения. Каждая сетка содержит метку и текстовое поле / combobox/несколько флажков, которые все имеют уникальное значение TabIndex в StackPanel. Вот 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>
Я хочу просто переходить от одного элемента управления к другому, но только в пределах элементов управления в сетках в сетках коллекция. До сих пор я пробовал другую клавиатурную навигацию.Настройки TabNavigation, но без успеха. Как лучше всего это сделать?
2 ответа:
Установить
TabNavigation
вKeyboardNavigationMode.Cycle
для каждого контейнера вы хотите вести себя так, чтобы фокус не ускользал от него, пока вы используете 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>
Не забудьте установить IsTabStop на динамически генерируемых сетках в True