WPFでのタブ順序の設定


92

WPFでタブの順序を設定するにはどうすればよいですか?いくつかのアイテムが展開され、いくつかが折りたたまれたItemsControlがあり、タブで移動しているときに折りたたまれたものをスキップしたいと思います。

何か案は?


ジェシーの提案答えは...移動するための方法である
ロマン

それがデフォルトの振る舞いのように見えますか?
JonnyRaa 2013

ジェシーは@ロマン?
ステルスラビ

1
@Stealth Rabbi:選択された答え。名前は(😆11年前から)変更された可能性がある
ロマン

回答:


63

XAMLで要素にKeyboardNavigation.IsTabStopを設定することにより、タブシーケンスの要素をスキップできます。

KeyboardNavigation.IsTabStop="False"

展開された状態に基づいてこのプロパティを切り替えるトリガーを設定できます。


1
Focusable = "False"を使用して、キーボードのフォーカスとタブの順序から削除することもできます。
ジェフコックス

2
@Geoff私はたくさんのボタンを使ってこれを行いましたが、それはうまくいきませんでした。
ToastyMallows 2013年

これにより、タブ順序に含めたくないコントロールをスキップできますが、WPFには他にも多くの問題があります。タブの順序付けは階層的ではないため、順序付けがゼロの(他のコントロールがデフォルトである)画面に他のコントロールがある場合、タブの順序付けは機能しません。
Christian Findlay

90

フォームの要素のタブ順序を明示的に設定する場合は、次の添付プロパティが役立つはずです。

<Control KeyboardNavigation.TabIndex="0" ... />

私はそれが非常に信頼できるとは思わなかったので、私は「助けになっていると思います」と言いますが、おそらくそれがどのように意図されているかについてもっと読む必要があります。他に誰もこのプロパティについて言及していないので、私はこの半分焼きたての答えを投稿します。


Win RTでは、プロパティは単にであることに注意してくださいTabIndex="0"


11
トリックは、親要素でKeyboardNavigation.TabNavigationのさまざまな値でTabIndexを使用することです。私は「ローカル」のTabNavigationを最も頻繁に使用しています。:)
グレッグD

このコントロールをホストするさまざまなStackPanelに追加するのではなく、これを各コントロールに追加する必要がありました。
DJ van Wyk 2015年

設定<DockPanel Panel.ZIndex="2">は、トップレベルパネルのエントリポイントを注文するのに役立ちます。
アベンモア2015年

25

<Control KeyboardNavigation.TabIndex="0" ... /> 完全に正常に動作します...たとえば-

<ComboBox Height="23" 
          Margin="148,24,78,0" 
          Name="comboBoxDataSet"
          VerticalAlignment="Top"
          SelectionChanged="comboBoxDestMarketDataSet_SelectionChanged"
          DropDownOpened="comboBoxDestMarketDataSet_DropDownOpened"
          KeyboardNavigation.TabIndex="0" />
<ComboBox Height="23" 
          Margin="148,56,78,0" 
          Name="comboBoxCategory" 
          VerticalAlignment="Top" 
          SelectionChanged="comboBoxDestCategory_SelectionChanged"
          DropDownOpened="comboBoxDestCategory_DropDownOpened"
          KeyboardNavigation.TabIndex="1" />

Tabキーを使用して、これら2つのコンボボックス間を移動できます。


13

私はここにはるかに簡単な解決策があると思います、あなたのコントロールやウィンドウの一番上など、あなたが追加できるもの:

KeyboardNavigation.TabNavigation="Cycle"

これにより、折りたたまれたタブも自動的に無視されます。


6

過去に私のために機能していた別の代替策は、すべての明示的なTabIndexステートメントを単に削除し、XAMLで宣言されている順序をコントロールが使用できるようにすることです。

もちろん、これにより、コントロールの順序を変更する必要がある場合があります。しかし、これは単純なコピーと貼り付けの操作です。


4
問題は、DockPanelsなど、コントロールを追加した順序がタブの順序と一致しない場合に、コントロールを簡単に並べ替えることができないことです。たとえば、右側のドッキングボタンを検討してください。最後の1つを最初にドッキングし、2番目から最後の1秒などをドッキングしますが、タブの順序を逆にします。それが一番つまらないものです。このようなとき、「タブオーダーの設定」を選択してすべてのコントロールをクリックするだけで、古いVB6日(言語ではなく、この機能だけ)がありません。シンプルで甘い。2018
。–マークA.ドノホー

0

KeyboardNavigation.TabNavigation = "None"を使用して、特定のコントロールのタブを完全にスキップできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.