如何通过ListView中的TextBox来选择TAB

时间:2011-09-18 23:27:34

标签: c# wpf listview textbox

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

1 个答案:

答案 0 :(得分:30)

问题是,对于列表视图中的每个项目,您有两个制表位:项目本身和文本框。您想为项目本身设置KeyboardNavigation.IsTabStopfalse。只需按照项目的样式设置即可。

<ListView KeyboardNavigation.TabNavigation="Continue" Name="TheLabelListView">
    <ListView.ItemContainerStyle>
        <Style>
            <Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
        </Style>
    </ListView.ItemContainerStyle>

    <!-- etc... -->
</ListView>