好的,我有一个ListView,它有两个GridViewColumns,一个显示数字,一个包含TextBox。我的问题是,我希望能够用Tab键浏览我在GridViewColumn中的所有TextBoxes。使用附加的属性KeyboardNavigation.TabNavigation,我几乎实现了我想要的东西。
我所实现的是:
first TAB -TAB ListViewItem focused
second TAB - first TextBox focused (第二个选项卡-第一个以TextBox为焦点的选项卡)
third TAB -TAB ListViewItem focused
fourth TAB - second TextBox focused
我想要的是
first TAB - first TextBox focused
second TAB - second TextBox focused
<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.给我的。它应该在列表视图项被选中时执行,并找到TextBox并将其聚焦。尽管在执行此方法时,bool TextBoxgotFocus始终为真,但不知何故,它仍然不会每次都选择TextBox。
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;
}
发布于 2011-09-19 07:43:16
问题是,对于列表视图中的每一项,您都有两个制表位:项本身和文本框。您希望将项目本身的KeyboardNavigation.IsTabStop
设置为false
。只需将其设置为项目的样式即可。
<ListView KeyboardNavigation.TabNavigation="Continue" Name="TheLabelListView">
<ListView.ItemContainerStyle>
<Style>
<Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
</Style>
</ListView.ItemContainerStyle>
<!-- etc... -->
</ListView>
https://stackoverflow.com/questions/7465151
复制相似问题