Хорошо У меня есть ListView, у которого есть 2 GridViewColumns, один из которых содержит число и один, содержащий TextBox
Моя проблема в том, что я хочу иметь возможность Tab через все текстовые поля, которые у меня есть в GridViewColumn.
С прилагаемой Property KeyboardNavigation.TabNavigation я достигаю почти того, чего хочу.
Чего я достигаю:
первая TAB - целая первая функция ListViewItem
второй TAB - первый текстовый блок сфокусирован
третий TAB - целая секунда, с которой работает ListViewItem
четвертая TAB - вторая фокусировка TextBox
Что я хочу -
первая TAB - первая ориентация TextBox
второй TAB - второй фокус TextBox
<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>
Этот код мне дал H.B., Он должен выполняться, когда выбран ListViewItem и находит TextBox и фокусирует его. Так или иначе, он все равно не выбирает TextBox каждый раз, когда этот метод выполняется. Bool TextBoxgotFocus всегда прав.
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;
}