Search code examples
c#wpftabindex

How to set TabIndex in Hyperlink?


I am new to WPF, I dont know how to do this. I tried following code -

<TextBlock Grid.Column="3" Grid.Row="3" Visibility="{Binding Path=CanCreate, Converter={StaticResource BoolVisibilityConverter}}">
     <Hyperlink KeyboardNavigation.TabIndex="2" Command="{Binding Path=CreateCommand}">Create 
         <Hyperlink.Style>
             <Style TargetType="{x:Type Hyperlink}">
                 <Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
                 <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=CanCreate, Converter={StaticResource BoolVisibilityConverter}}">
                        <Setter Property="KeyboardNavigation.IsTabStop" Value="True" />
                    </DataTrigger>
                 </Style.Triggers>
             </Style>
         </Hyperlink.Style>
    </Hyperlink>
</TextBlock>

Visibility depends on CanCreate Dependency property. Here IsTabStop is not enabling. Can anyone suggest the solution. Thanks in advance.

Requirement

I want to set TabIndex to hyperlink when it is visible.


Solution

  • You don't need a converter in the DataTrigger change your Hyperlink.Style to:

    <Hyperlink.Style>
          <Style TargetType="{x:Type Hyperlink}">
                <Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
                <Style.Triggers>
                     <DataTrigger Binding="{Binding Path=CanCreate}" Value="True">
                          <Setter Property="KeyboardNavigation.IsTabStop" Value="True" />
                     </DataTrigger>
                 </Style.Triggers>
           </Style>
    </Hyperlink.Style>
    

    EDIT: You may also want to remove focus when your TextBlock and Hyperlink is invisible, you can do it by adding another DataTrigger:

    <Hyperlink.Style>
              <Style TargetType="{x:Type Hyperlink}">
                    <Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
                    <Style.Triggers>
                         <DataTrigger Binding="{Binding Path=CanCreate}" Value="True">
                              <Setter Property="KeyboardNavigation.IsTabStop" Value="True" />
                         </DataTrigger>
                         <DataTrigger Binding="{Binding Path=CanCreate}" Value="False">
                              <Setter Property="Focusable" Value="False" />
                         </DataTrigger>
                     </Style.Triggers>
               </Style>
        </Hyperlink.Style>