c# - Cómo TAB a través de TextBoxes en un ListView
wpf gridview (1)
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 configúralo 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>
Ok, tengo un ListView que tiene 2 GridViewColumns, uno que muestra un número y el otro que contiene un TextBox. Mi problema es que quiero poder tabular todos los TextBoxes que tengo en el GridViewColumn. Con el Property KeyboardNavigation. TabNavigation, logro casi lo que quiero.
Lo que logro es:
primer TAB - todo primer ListViewItem enfocado
segundo TAB - primer cuadro de texto enfocado
tercer TAB - segundo segundo ListViewItem enfocado
cuarto TAB - segundo TextBox enfocado
Lo que quiero es
primer TAB - primer cuadro de texto enfocado
segundo TAB - segundo cuadro de texto enfocado
<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 dado por HB. 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 que este método se ejecuta, pero bool TextBoxgotFocus siempre es cierto.
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;
}