2014-02-25 92 views
0

我需要TabNavigation來遍歷整個VisualTree。WPF KeyboardNavigation.Tab導航與自定義控件

如果在視圖中獲取自定義控件,我需要它的內部元素參與視圖的TabNavigation。

我需要使用的TabIndex在我看來,因爲我需要的標籤流程是從上到下

自定義控件的模板:

<ControlTemplate> 

     <Grid> 
      <TextBox x:Name="first"/> 
      <TextBox /> 
      <TextBox /> 
     </Grid> 

     <ControlTemplate.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Setter TargetName="first" Property="FocusManager.FocusedElement" Value="{Binding ElementName=first}" /> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

查看:

 <Grid> 
      <Grid.ColumnDefentions> 
       <ColumnDefention /> 
       <ColumnDefention /> 
      </Grid.ColumnDefentions> 


      <TextBox Grid.Column="0" TabIndex="0" /> 
      <local:MyControl Grid.Column="0" TabIndex="1" /> 
      <TextBox Grid.Column="0" TabIndex="2" /> 

      <TextBox Grid.Column="1" TabIndex="3" /> 
      <TextBox Grid.Column="1" TabIndex="4" /> 
      <TextBox Grid.Column="1" TabIndex="5" /> 

     </Grid> 

航行時的TabIndex 0導航到,然後第一個文本框在我的控制,然後第二個和第三個,TabIndex 2 是不是導航,它就好像它失去了標籤索引。

如何將導航內的自定義控件的模板在整個視圖的選項卡流中?

+1

你使用IsTabStop和AcceptsTab性質? –

回答

0

給定與其父項相同的TabIndex,父項視覺樹中的項目按順序獲取選項卡。

<ControlTemplate> 

    <Grid> 
     <TextBox TabIndex={TempalteBinding TabIndex} /> 
     <TextBox TabIndex={TempalteBinding TabIndex} /> 
     <TextBox TabIndex={TempalteBinding TabIndex} /> 
    </Grid> 
<ControlTemplate> 

查看:

<Grid> 
     <Grid.ColumnDefentions> 
      <ColumnDefention /> 
      <ColumnDefention /> 
     </Grid.ColumnDefentions> 


     <TextBox Grid.Column="0" TabIndex="0" /> 
     <local:MyControl Grid.Column="0" TabIndex="1" IsTabStop="False" /> 
     <TextBox Grid.Column="0" TabIndex="2" /> 

     <TextBox Grid.Column="1" TabIndex="3" /> 
     <TextBox Grid.Column="1" TabIndex="4" /> 
     <TextBox Grid.Column="1" TabIndex="5" /> 

    </Grid>