好的我有一个ListView,它有2个GridViewColumns,一个显示一个数字,一个包含TextBox
我的问题是我希望能够通过GridViewColumn中的所有TextBox来Tab。
随着附加的Property KeyboardNavigation.TabNavigation我几乎达到了我想要的目标
我所取得的成就是:
第一个TAB - 整个第一个ListViewItem聚焦为
第二个TAB - 第一个TextBox专注于
第三个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.给我的。 。它应该在选择ListViewÍtem时执行,并找到TextBox并将其聚焦。不知何故,每次执行此方法时,它仍然不会选择TextBox bool TextBoxgotFocus始终为true。
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;
}
答案 0 :(得分:30)
问题是,对于列表视图中的每个项目,您有两个制表位:项目本身和文本框。您想为项目本身设置KeyboardNavigation.IsTabStop
到false
。只需按照项目的样式设置即可。
<ListView KeyboardNavigation.TabNavigation="Continue" Name="TheLabelListView">
<ListView.ItemContainerStyle>
<Style>
<Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
</Style>
</ListView.ItemContainerStyle>
<!-- etc... -->
</ListView>