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>

当进入此列表框时,第一项中的第一个可聚焦控件将获得焦点。再次 Tab 键将移动到第一个项目中的下一个可聚焦控件,当没有更多控件时,焦点(和选择)将移动到列表框中的下一个项目。当到达最后一项中的最后一个控件时,制表符将移动到包含元素中列表框之后的下一个控件。

因为ListBoxItem无法接收焦点,您无法使用箭头键在列表中的项目之间导航。您必须在ListBoxItem.

于 2013-01-23T17:14:00.153 回答
2

不要使用 ListBox,而是使用不带焦点的 ItemsControl。

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