Tab专注于我隐式生成的ListBoxItem

时间:2012-12-26 22:34:01

标签: wpf xaml

我有一个承载控件的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>

2 个答案:

答案 0 :(得分: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>

当勾选到此列表框时,第一个项目中的第一个可聚焦控件将获得焦点。再次跳转将移动到第一个项目中的下一个可聚焦控件,当没有更多控件时,焦点(和选择)将移动到列表框中的下一个项目。当达到最后一个项目中的最后一个控件时,tabbing将移动到包含元素中列表框后面的下一个控件。

由于ListBoxItem无法获得焦点,因此您无法使用箭头键在列表中的项目之间导航。您必须在ListBoxItem内的每个控件中实现此功能。

答案 1 :(得分:2)

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

<ItemsControl ItemsSource="{Binding UiControls}" >
 ...
</ItemsControl>