0

コントロールをホストする ListBox があります。あるコントロールから次の行のコントロールにタブで移動できるようにしたいと考えています。タブを押した後、暗黙的に生成された ListBoxItem がフォーカスされているようです。どうすればこれを回避できますか?

<ListBox ItemsSource="{Binding UiControls}" 
         DockPanel.Dock="Top"
         BorderThickness="0"
         Background="{DynamicResource ControlInteriorBrush}"
         KeyboardNavigation.TabNavigation="Continue"
         KeyboardNavigation.ControlTabNavigation="Continue">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="col1"/>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="col2"/>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="col3"/>
                </Grid.ColumnDefinitions>
                <Border Grid.Column="0">
                    <TextBlock Text="{Binding Path=Label}" 
                               FontWeight="Bold"
                               VerticalAlignment="Center"     
                               Background="{DynamicResource ControlInteriorBrush}"
                               Foreground="{DynamicResource FontBrush}"
                               Margin="0,0,25,0"
                               KeyboardNavigation.TabNavigation="Continue"/>
                </Border>
                <Controls:AutoCompleteTextBox Default="{Binding Path=DefaultValue}"  
                                              Items="{Binding Path=DropDownValues}"
                                              Tag="{Binding}"
                                              DataContext="{Binding}"
                                              Width="300" 
                                              Grid.Column="1" 
                                              Height="30"
                                              Background="{DynamicResource ControlInteriorBrush}"
                                              Margin="0,0,10,0"
                                              KeyboardNavigation.IsTabStop="True"
                                              FocusManager.IsFocusScope="True"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
4

2 に答える 2

4

以下は、リスト ボックス項目内の個々のコントロールがタブ ナビゲーションに参加できるようにするために使用できるパターンです。必要な XAML のみを含めました。必要に応じてこれをカスタマイズする必要があります。

<ListBox Focusable="False" KeyboardNavigation.TabNavigation="Continue">
  <ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
      <Setter Property="Focusable" Value="False"/>
      <Style.Triggers>
        <Trigger Property="IsKeyboardFocusWithin" Value="true">
          <Setter Property="IsSelected" Value="true" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </ListBox.ItemContainerStyle>
</ListBox>

このリスト ボックスにタブ移動すると、最初の項目の最初のフォーカス可能なコントロールがフォーカスを受け取ります。もう一度タブを押すと、最初の項目の次のフォーカス可能なコントロールに移動し、コントロールがなくなると、フォーカス (および選択) がリスト ボックスの次の項目に移動します。最後の項目の最後のコントロールに到達すると、タブは、含まれている要素のリスト ボックスに続く次のコントロールに移動します。

ListBoxItemフォーカスを受け取ることができないため、矢印キーを使用してリスト内の項目間を移動できません。内の各コントロールでこれを実装する必要がありListBoxItemます。

于 2013-01-23T17:14:00.153 に答える
2

ListBox を使用する代わりに、フォーカスを持たない ItemsControl を使用します。

<ItemsControl ItemsSource="{Binding UiControls}" >
 ...
</ItemsControl>
于 2012-12-26T23:41:29.327 に答える