首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ListView中通过TextBoxes制表符

如何在ListView中通过TextBoxes制表符
EN

Stack Overflow用户
提问于 2011-09-19 07:27:34
回答 1查看 7.1K关注 0票数 18

好的,我有一个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

代码语言:javascript
复制
    <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。

代码语言:javascript
复制
 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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-19 07:43:16

问题是,对于列表视图中的每一项,您都有两个制表位:项本身和文本框。您希望将项目本身的KeyboardNavigation.IsTabStop设置为false。只需将其设置为项目的样式即可。

代码语言:javascript
复制
<ListView KeyboardNavigation.TabNavigation="Continue" Name="TheLabelListView">
    <ListView.ItemContainerStyle>
        <Style>
            <Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
        </Style>
    </ListView.ItemContainerStyle>

    <!-- etc... -->
</ListView>
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7465151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档