2011-05-31 95 views
3

我的TreeViewItem.Items數據模板包含2個文本框。當我在第一個文本框中按下Tab鍵時,焦點會進入第二個文本框。我想當我按下第二個文本框上的Tab - 將焦點放在下一個TreeViewItem子項目上的第一個文本框中,如果有TreeViewItem沒有下一個子項目,則焦點將在下一個TreeViewItem的第一個子項目上進行。怎麼做?WPF TreeView中的鍵盤導航

<TreeView Name="resultsTv" 
      ItemTemplate="{StaticResource excerciseResultDataTemplate}" 
      KeyboardNavigation.TabNavigation="Contained"> 
       <TreeView.ItemContainerStyle> 
        <Style> 
         <Setter Property="TreeViewItem.IsExpanded" Value="True"/> 
         <Setter Property="KeyboardNavigation.TabNavigation" Value="Contained"></Setter> 
        </Style> 
       </TreeView.ItemContainerStyle> 
      </TreeView> 

<HierarchicalDataTemplate x:Key="excerciseResultDataTemplate" ItemTemplate="{StaticResource setDataTemplate}" ItemsSource="{Binding Sets}"> 
      <StackPanel Orientation="Horizontal" KeyboardNavigation.TabNavigation="Continue"> 
       <Label Content="{Binding Name}"></Label> 
      </StackPanel> 
     </HierarchicalDataTemplate> 

<DataTemplate x:Key="setDataTemplate"> 
      <StackPanel Orientation="Horizontal" KeyboardNavigation.TabNavigation="Continue"> 
       <TextBox Width="50" Text="{Binding Weight}"/> 
       <TextBox Width="50" Text="{Binding Repeats"/> 
      </StackPanel> 
     </DataTemplate> 

回答

6

自己有這個問題,我在網上看了這個,只看到了有關WPF商業自定義控件的論壇帖子。然而,因爲它們依賴於WPF的通用容器的設計,他們仍然可以工作:

設置你的TreeView標籤的KeyboardNavigation.TabNavigation屬性Contained,包括您在樹中的以下內容:

<TreeView.ItemContainerStyle> 
    <Style TargetType="TreeViewItem"> 
     <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/> 
    </Style> 
</TreeView.ItemContainerStyle> 

有三個問題這個。按住Shift鍵不起作用。 (請參閱此question。)此外,上下箭頭鍵不會太多。我剛剛發現這樣做會處理MouseLeftButtonUp事件,以便您自己的事件不會被觸發。