2011-09-18 15 views
17

いいえListViewに2つのGridViewColumnsと1つのテキストボックスが表示されています 私の問題はGridViewColumnにあるすべてのテキストボックスをタブで表示できるようにすることです。 添付のプロパティKeyboardNavigation.TabNavigationを使用して、私が望むものをほぼ達成します。私は達成何
がある: - 全体の最初のListViewItem
二TABを重視 - 最初のTABが
最初のTextBoxは
第三TABを重視 - 全二のListViewItemは
第四TABを重視 - 2番目のTextBoxは私が欲しいもの
ListViewのテキストボックスをタブする方法

を重視しました第二のTextBoxが

を重視 -
最初TABされる - 最初のTextBoxは
2番目のタブを重視しました
<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は常に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; 
    } 

答えて

27

問題は、リストビュー内の各項目に対して、項目自体とテキストボックスという2つのタブストップがあることです。アイテム自体にKeyboardNavigation.IsTabStopfalseを設定します。ちょうどあなたのアイテムのスタイルでそれを設定します。

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

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

ありがとうございます。それは正確に –

+0

私は最近、まったく同じ問題に直面した。しかし、あなたの答えは役に立たなかった。私は、テキストボックス(タブストップなし)を持つlistViewアイテムが、listViewタブのナビゲーション全体を壊してしまうことが分かっています。言い換えれば、各リストアイテムに少なくとも1つのタブストップがあり、その場合は - はい - アイテムコンテナのタブストップを設定しないと、正常に機能しません。一部のアイテムがヘッダーのように機能する場合はどうなりますか?助けてください。 – mjollneer

関連する問題