2010-12-05 3 views
1

В моем настольном приложении WPF 4.0 я хочу добавить возможность перемещаться по элементам окна, нажав Tab-button.TabNavigation на элементах окна в WPF

Вот фрагмент моего XAML:

<!--main body layout--> 
<StackPanel x:Name="BodyLayout" 
     Style="{StaticResource Body_Block}"> 

    <!--teaser block--> 
    <Grid x:Name="TeaserGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <TextBlock Grid.Column="0" 
       Grid.Row="0" 
       Style="{StaticResource Body_Teaser_Centering}"> 
       <Hyperlink Style="{StaticResource Body_Teaser_Hyperlink}" 
         Focusable="True" 
         KeyboardNavigation.TabIndex="0" 
         Click="Call_WinOffences_Click"> 
        <Image Source="Resources/teaser_offences.png" 
          Style="{StaticResource Body_Teaser_Image}" /> 
        <LineBreak /> 
        <TextBlock Text="Offences" 
          Style="{StaticResource Body_Title}" /> 
       </Hyperlink> 
     </TextBlock> 

     <TextBlock Grid.Column="1" 
       Grid.Row="0" 
       Style="{StaticResource Body_Teaser_Centering}"> 
      <Hyperlink Style="{StaticResource Body_Teaser_Hyperlink}" 
        Focusable="True" 
        KeyboardNavigation.TabIndex="1" 
        Click="Call_WinEvents_Click"> 
       <Image Source="Resources/teaser_events.png" 
         Style="{StaticResource Body_Teaser_Image}" /> 
       <LineBreak /> 
       <TextBlock Text="Events" 
         Style="{StaticResource Body_Title}" /> 
      </Hyperlink> 
     </TextBlock> 
    </Grid> 
</StackPanel> 

Что именно мне нужно сделать? Я хочу открыть это окно и нажав первый раз на клавиатуре Tab, чтобы установить фокус на блок гиперссылок (с помощью Image и TextBlock) с помощью TabIndex = «0» и вторым нажатием Tab, чтобы переключить фокус на элемент с помощью TabIndex = «1», Также я хочу переключить эти переключатели. Другими словами, я хочу, чтобы этот пользователь мог перемещаться по элементам в моем окне с помощью клавиатуры Tab, поскольку мы регулярно делаем это в любом другом обычном приложении WinForms.

Что на самом деле у меня сейчас? Когда я нажимаю на клавиатуру Tab, гиперссылки не получают фокуса, и я не могу работать с моим окном без мыши.

Пожалуйста, сообщите мне, что я собираюсь сделать неправильно?

ответ

1

Update
Я скопировал ваш образец кода в небольшой проект (для стилей, которые у меня не было, за исключением), и это, кажется, работает хорошо для меня. Я могу запустить «Окно», нажать «Вставить», чтобы сначала сосредоточиться на гиперссылке, нажать «Ввод», нажать «Событие Click», снова нажать Tab и т. Д. Единственное, что я могу думать, это то, что что-то в ваших стилях переопределяет это поведение. Я загрузил свой примерный проект here.

Примечание: Я изменил источник для изображений, так что вам придется изменить их обратно :)

Старый пост
Есть две части здесь. Первый заключается в том, что FrameworkElement является Focusable или нет. Второй - TabIndex. TabIndex находится в элементе управления, который происходит из FrameworkElement, и не все элементы происходят из Control, например TextBlock, Rectangle и т. Д. Если вы по какой-то причине хотите добавить TabIndex к таким элементам, вы также можете использовать KeyboardNavigation.TabIndex. Вот простой пример с 6 элементами управления с набором Tab-Order и 1 Rectangle не Focusable (поскольку он по умолчанию не является Фокусируемым).

<Grid ShowGridLines="True"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <Button Grid.Row="0" Grid.Column="0" 
      Content="Some Button" 
      KeyboardNavigation.TabIndex="0" 
      Margin="5"/> 
    <TextBox Grid.Row="1" Grid.Column="0" 
      Text="Some TextBox" 
      KeyboardNavigation.TabIndex="2" 
      Margin="5"/> 
    <TextBox Grid.Row="2" Grid.Column="0" 
      Text="Another TextBox" 
      KeyboardNavigation.TabIndex="1" 
      Margin="5"/> 
    <TextBlock Grid.Row="0" Grid.Column="1" 
       Text="Focusable TextBlock" 
       Focusable="True" 
       KeyboardNavigation.TabIndex="4" 
       Margin="5"/> 
    <Rectangle Grid.Row="1" Grid.Column="1" 
       Fill="Blue" 
       Margin="5"/> 
    <Rectangle Grid.Row="2" Grid.Column="1" 
       Fill="Red" 
       Focusable="True" 
       KeyboardNavigation.TabIndex="3" 
       Margin="5"/> 
</Grid> 
+0

Я добавил KeyboardNavigation.TabIndex к некоторому объекту гиперссылок, но он не работает, я не вижу границы фокуса на гиперссылке. Как я могу это исправить? Все мои гиперссылки находятся внутри элемента Grid. – 2010-12-07 12:41:34

0

Может быть, это поможет: WPF TabStop/TabIndex in ItemsControl

TabIndex путь вы идете сюда. Когда вы нажмете вкладку, чтобы перейти через элементы управления, она будет идти в порядке TabIndex. Они даже не должны быть в последовательном порядке - 1, 2, 5 - это то же самое, что и 1, 2, 3, если нет нигде 3 и 4.

 Смежные вопросы

  • Нет связанных вопросов^_^