3

バインドされた ItemsSource を持つ ItemsControl を持つ別の StackPanel を含む ScrollViewer を含む StackPanel があるとします。この 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 設定を試しましたが、うまくいきませんでした。これを行う最善の方法は何ですか?

4

2 に答える 2

2

そのように動作させたいコンテナごとにに設定TabNavigationして、使用している限りフォーカスがエスケープされないようにします+ :KeyboardNavigationMode.CycleTabShiftTab

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 に答える