2010-12-05 34 views
1

私のWPF 4.0デスクトップベースのアプリケーションでは、Tabキーを押してウィンドウの要素を通過する機能を追加したいと考えています。WPFのウィンドウ要素のTabNavigation

<!--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> 

私は正確に何が必要です:ここで

は私のXAMLの断片でありますか? TabIndex = "1"の要素のフォーカスを切り替えるには、TabIndex = "0"とTabキーを押しながらハイパーリンクブロック(ImageとTextBlock)でフォーカスを設定するTabキーを押し、このウィンドウを開きます。また、私はこのスイッチを繰り返す必要があります。言い換えれば、他の通常のWinFormsアプリケーションでこれを行うためには、Tabキーボードで私のウィンドウ内の要素をナビゲートすることができます。

実際には現在何がありますか? Tabキーを押したときハイパーリンクにフォーカスが得られず、マウスなしでウィンドウを操作できません。

私に間違っていることを教えてください。

答えて

1

更新
私は小さなプロジェクトに(私は持っていなかったスタイルを除く)あなたのサンプルコードをコピーして、それは私のために正常に動作しているようです。私はウィンドウを起動し、Tabキーを押して最初のハイパーリンクをフォーカスし、Enterキーを押すとClickイベントが発生し、Tabキーをもう一度押します。唯一考えられるのは、スタイル内の何かがこの動作をオーバーライドすることです。サンプルプロジェクトhereをアップロードしました。

注:あなたは2つの部分はここにあります
バック:)

古いポストをそれらを変更する必要がありますので、私がイメージのソースを変更しました。最初のものは、FrameworkElementがFocusableかどうかです。 2番目はTabIndexです。 TabIndexはControl内にあり、FrameworkElementから派生し、TextBlock、RectangleなどControlから派生した要素はありません。何らかの理由でTabIndexをそのような要素に追加したい場合は、代わりにKeyboardNavigation.TabIndexを使用できます。タブオーダーセットを持つ6つのコントロールと、1つのRectangleがFocusableではない簡単な例です(デフォルトで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要素の内側にあります。 –

+0

@Toucki:ハイパーリンクにFocusable = "True"を追加しましたか?問題が解決しない場合は、ハイパーリンク用のxamlを投稿できますか? –

+0

それでも動作しません。私は、このトピックの問題の本文に、より多くのXAMLコードを追加しました。私が間違っていることを指摘できますか?前もって感謝します。 –

0

多分これは役立ちます:WPF TabStop/TabIndex in ItemsControl

のTabIndexはあなたがここに行く方法です。あなたがコントロールを通過するためにタブを押すと、それはTabIndexの順序で行くでしょう。これらは連続した順序である必要はありません.3と4がどこにも定義されていなければ、1、2、5は1,2,3と同じです。

関連する問題