2011-09-18 12 views
17

Ok Tengo un ListView que tiene 2 GridViewColumns uno que muestra un número y uno que contiene un TextBox Mi problema es que quiero poder desplazarme por todos los cuadros de texto que tengo en GridViewColumn. Con el Property KeyboardNavigation.TabNavigation adjunto logro casi lo que quiero.
Lo que consiguen es:
primera TAB - toda la primera ListViewItem centró
segundo TAB - primer cuadro de texto centrado
tercer TAB - toda segundos ListViewItem centró
cuarto TAB - segundo cuadro de texto centrado
Cómo TAB a través de cuadros de texto en un ListView

Lo que quiero se
primera TAB - primer cuadro de texto centrado
segundo TAB - segundo cuadro de texto centrado

<ListView KeyboardNavigation.TabNavigation="Continue" Name="TheLabelListView" > 
          <ListView.ItemContainerStyle > 
            <EventSetter Event="Selected" Handler="ItemSelected" /></Style> 
          </ListView.ItemContainerStyle> 
          <ListView.View> 
           <GridView x:Name="GridViewSmall" > 
            <GridViewColumn Header="#" Width="20" DisplayMemberBinding="{Binding SelectorIndexNumber}" /> 
            <GridViewColumn Header="Selector" Width="175"> 
             <GridViewColumn.CellTemplate> 
              <DataTemplate> 
               <TextBox Name="SelectorTextBox" Text="{Binding SelectorName}" />              
              </DataTemplate> 
             </GridViewColumn.CellTemplate> 
            </GridViewColumn> 
           </GridView> 
          </ListView.View> 
         </ListView> 

Este código me fue entregado por H.B. . Se supone que se ejecuta cuando se selecciona un ListViewÍtem y encuentra el TextBox y lo enfoca. De alguna manera todavía no selecciona el TextBox cada vez aunque cuando se ejecuta este método bool TextBoxgotFocus siempre es verdadero.

private void ItemSelected(object sender, RoutedEventArgs e) 
    { 
     var item = sender as ListViewItem; 
     TextBox h = (FindNamedChild(item, "SelectorTextBox") as TextBox); 
     bool TextBoxgotFocus = h.Focus(); 
    } 

    public static object FindNamedChild(DependencyObject container, string name) 
    { 
     if (container is FrameworkElement) 
     { 
      if ((container as FrameworkElement).Name == name) return container; 
     } 
     var ccount = VisualTreeHelper.GetChildrenCount(container); 
     for (int i = 0; i < ccount; i++) 
     { 
      var child = VisualTreeHelper.GetChild(container, i); 
      var target = FindNamedChild(child, name); 
      if (target != null) 
      { 
       return target; 
      } 
     } 
     return null; 
    } 

Respuesta

27

El problema es que para cada elemento en la vista de lista, tiene dos tabulaciones: el elemento en sí y el cuadro de texto. Desea establecer KeyboardNavigation.IsTabStop en false para los elementos en sí. Solo establece eso en el estilo de tu artículo.

<ListView KeyboardNavigation.TabNavigation="Continue" Name="TheLabelListView"> 
    <ListView.ItemContainerStyle> 
     <Style> 
      <Setter Property="KeyboardNavigation.IsTabStop" Value="False" /> 
     </Style> 
    </ListView.ItemContainerStyle> 

    <!-- etc... --> 
</ListView> 
+0

Gracias. Eso es exactamente –

+0

Recientemente me enfrenté exactamente al mismo problema. Pero tu respuesta no ayudó. Descubrí que los elementos de ListView sin cuadros de texto (sin tabStops en ellos) destruyen toda la navegación de la pestaña listView. En otras palabras, todo está bien solo cuando cada elemento de la lista tiene al menos una pestaña en su interior y, en ese caso, sí, solo tiene que configurar una tapa para el contenedor de elementos para hacerlo bien. pero ¿qué pasa si algunos elementos actúan como encabezados? por favor ayuda. – mjollneer

Cuestiones relacionadas