タブにはName
プロパティが設定されている必要があります(x:Name
:XAML
)。タブの「最後の」項目には、Name
プロパティが設定されている必要があります。今TabControl
オブジェクトのKeyDown
(またはKeyUp
)イベントを設定
:
Debug.WriteLine("key pressed: " + e.Key);
if (e.Key == Key.Tab)
{
if (btnButton.IsFocused) tab2.Focus();
}
Debug.WriteLine(...)
は鍵がすべてが動作されると、その行をコメントまたは削除、捕獲されていることを確認することです。
タブを順番にフォーカスするには、余分なコード行が必要です。
private void tabControl_KeyDown(object sender, KeyEventArgs e)
{
Debug.WriteLine("key pressed: " + e.Key);
if (e.Key == Key.Tab)
{
var tabs = tabControl.Items.Cast<TabItem>().ToArray();
var tab=tabs.Select((t, i)=>new {i, t}).SingleOrDefault(t => t.t.IsSelected); // one has to be selected. result is null of no tabs are present (then why have a tab control?)
if (tab == null) return;
switch (tab.i)
{
case 0:
if (btnButton.IsFocused)
tab2.Focus();
break;
case 1:
tab3.Focus();
break;
case 2:
tab4.Focus();
break;
case 3:
tab1.Focus(); // jump to first?
// OR do something else
break;
default:
break;
}
}
}
は、フォーム上のあなたの「最後」の項目でbtnButton
を交換してください:ここでは完全なKeyDown
イベントです。
私はこのアプローチについて考えましたが、これはうまくいくでしょうが、私は手動で最後のコントロールを特定し、一般的なシナリオでは難しくないかもしれない各タブ項目の次のタブを見つける必要があります。私の場合、すべてのタブは動的に生成され、顧客によって定義されたいくつかのパラメータに基づいて異なります。したがって、タブの順序はすべての顧客にとって同じではない可能性があります。また、いくつかのシナリオではタブが追加されない場合もあります。たとえば、顧客が指紋システムを必要としない場合、「指紋」タブは生成されません。 (続き) – Jay
同様に、各タブ内のコントロールは、さまざまなパラメータとアプリケーションモードに基づいて存在することも、存在しないこともあります。これにより、タブ項目の最後のコントロールを見つけることが難しくなります。何よりも、もし私がそれを手動で定義する良い方法ではないでしょう。だから、私は疑問に思っていたwpfがこれのためにinbuiltを提供するものがありますか?ありがとう! – Jay
'TabControl'自体ではなく、特定の最後のコントロールの' KeyDown'(または 'KeyUp')イベントに対してこれを行うことができます。文字通り 'if(e.Key == Key.Tab)tabX.Focus();'のような1行の文字列になります。ここで 'tabX'はアクティブ化したいタブです。 – nurchi