WPF에서 탭 순서 설정


92

WPF에서 탭 순서를 어떻게 설정합니까? 일부 항목이 확장되고 일부가 축소 된 ItemsControl이 있으며 탭할 때 축소 된 항목을 건너 뛰고 싶습니다.

어떤 아이디어?


Jesse의 제안 된 답변은가는 길입니다 ...
Román 2008-12-12

기본 동작 인 것 같습니까?
JonnyRaa 2013

@ Román 제시는 누구입니까?
Stealth Rabbi

1
@Stealth Rabbi : 선택한 답변. 이름이 변경되었을 수 있습니다 (11 년 전에서 😆)
Román

답변:


63

XAML의 요소에 KeyboardNavigation.IsTabStop 을 설정하여 탭 시퀀스의 요소를 건너 뛸 수 있습니다 .

KeyboardNavigation.IsTabStop="False"

확장 된 상태를 기반으로이 속성을 전환하는 트리거를 설정할 수 있습니다.


1
또한 Focusable = "False"로 키보드 포커스 및 탭 순서에서 제거 할 수도 있습니다.
Geoff Cox

2
@Geoff 나는 많은 버튼을 사용하여 이것을했지만 작동하지 않았습니다.
ToastyMallows 2013 년

이렇게하면 탭 순서에 포함하지 않으려는 컨트롤을 건너 뛸 수 있지만 WPF에는 다른 많은 문제가 있습니다. 탭 순서는 계층 적이 지 않으므로 화면에 순서가 0 인 다른 컨트롤 (기본적으로 수행됨)이 있으면 탭 순서가 작동하지 않습니다.
Christian Findlay 2018

90

양식의 요소에 대한 탭 순서를 명시 적으로 설정하려면 다음과 같은 연결된 속성이 도움이 될 것입니다.

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

나는 그것이 어떻게 사용되도록 의도되었는지에 대해 더 많이 읽어야 할 필요가있을지라도 내가 그것이 매우 신뢰할 수있는 것을 발견하지 못했기 때문에 "도움이 필요하다"라고 말한다. 아무도이 속성을 언급하지 않았기 때문에 나는이 반쯤 구운 답변 만 게시합니다.


Win RT에서 속성은 TabIndex="0".


11
트릭은 부모 요소에서 다양한 KeyboardNavigation.TabNavigation 값과 함께 TabIndex를 사용하는 것입니다. "로컬"TabNavigation을 가장 자주 사용하고 있습니다. :)
Greg D

해당 컨트롤을 호스팅하는 다른 StackPanel에 추가하는 대신 각 컨트롤에이 기능을 추가해야했습니다.
DJ van Wyk

설정 <DockPanel Panel.ZIndex="2">은 최상위 패널의 진입 점을 주문하는 데 도움이됩니다.
avenmore

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 키를 사용하여이 두 콤보 상자를 탐색 할 수 있습니다.


13

여기에 훨씬 더 쉬운 솔루션이 있다고 생각합니다. 컨트롤이나 창 또는 기타 항목의 맨 위에 다음을 추가 할 수 있습니다.

KeyboardNavigation.TabNavigation="Cycle"

이것은 또한 접힌 탭을 자동으로 무시합니다.


6

과거에 저에게 도움이 된 또 다른 대안은 모든 명시 적 TabIndex문 을 간단히 제거 하고 컨트롤이 XAML에서 선언 된 순서를 사용하도록하는 것입니다.

물론 컨트롤을 다시 정렬해야 할 수도 있습니다. 그러나 이것은 간단한 복사-붙여 넣기 작업입니다.


5
문제는 DockPanels와 같은 항목에서 추가 한 순서가 탭 순서와 일치하지 않는 컨트롤을 단순히 재정렬 할 수 없다는 것입니다. 예를 들어 오른쪽의 도킹 버튼을 고려하십시오. 마지막 하나를 먼저, 두 번째에서 마지막 두 번째 등으로 도킹하지만 탭 순서를 반대로하고 싶습니다. 그것이 나를 가장 많이 괴롭히는 것입니다. 이런 경우에는 '탭 순서 설정'을 선택하고 모든 컨트롤을 클릭하는 이전 VB6 일 (언어가 아니라이 기능 만)을 놓쳤습니다. 간단하고 달콤합니다. 우리가 2018 년에 여기처럼 아무것도없는 좌절
마크 A. Donohoe와

1
@Mark 또는 2020 :). WPF의 탭 순서는 엄청나게 복잡합니다. 사용자 지정 순서가 필요할 때마다 예측할 수없는 상태에서 하루 종일 씨름해야합니다. Winforms에서는 창당 몇 분이 걸리는 평범한 작업이었습니다.
bokibeg

0

KeyboardNavigation.TabNavigation = "None"을 사용하여 특정 제어를 위해 Tabbing을 완전히 건너 뛸 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.