Đặt thứ tự tab trong WPF


92

Làm cách nào để đặt thứ tự tab trong WPF? Tôi có một ItemsControl với một số mục được mở rộng và một số mục được thu gọn và tôi muốn bỏ qua các mục được thu gọn khi tôi đang tab.

Bất kỳ ý tưởng?


Câu trả lời được đề xuất của Jesse là con đường để đi ...
Román

đó dường như là hành vi mặc định?
JonnyRaa

@ Román Jesse là ai?
Stealth Rabbi,

1
@Stealth Rabbi: câu trả lời đã chọn. Tên có thể đã thay đổi (từ 11 năm trước 😆)
Román

Câu trả lời:


63

Bạn có thể bỏ qua các phần tử trong chuỗi tab bằng cách đặt KeyboardNavigation.IsTabStop trên phần tử trong XAML.

KeyboardNavigation.IsTabStop="False"

Bạn có thể thiết lập trình kích hoạt sẽ chuyển đổi thuộc tính này dựa trên trạng thái được mở rộng.


1
Bạn cũng có thể Focusable = "False" để xóa nó khỏi tiêu điểm Bàn phím cũng như thứ tự tab.
Geoff Cox

2
@Geoff Tôi đã làm điều này với một loạt các nút và nó không hoạt động, chỉ là fyi.
ToastyMallows

Điều này cho phép bỏ qua các điều khiển mà bạn không muốn trở thành một phần của thứ tự tab, nhưng có rất nhiều vấn đề khác trong WPF. Các tổ chức tab không có thứ tự phân cấp, vì vậy nếu có các điều khiển khác trên màn hình có thứ tự bằng 0 (theo mặc định) thì thứ tự tab sẽ không hoạt động.
Christian Findlay

90

Nếu bạn muốn đặt thứ tự tab một cách rõ ràng cho các phần tử trong biểu mẫu của mình, thuộc tính đính kèm sau đây sẽ giúp:

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

Tôi nói "phải giúp" vì tôi không thấy nó đáng tin cậy lắm mặc dù có lẽ tôi cần đọc thêm về cách nó được dự định sử dụng. Tôi chỉ đăng câu trả lời nửa nướng này vì không ai khác đề cập đến tài sản này.


Lưu ý rằng trong Win RT, thuộc tính chỉ là TabIndex="0".


11
Mẹo là sử dụng TabIndex với các giá trị khác nhau của KeyboardNavigation.TabNavigation trong phần tử mẹ. Tôi thấy mình thường xuyên sử dụng TabNavigation "Cục bộ" nhất. :)
Greg D

Tôi đã phải thêm điều này vào từng điều khiển của mình, thay vì chỉ thêm chúng vào các StackPanels khác nhau chứa các điều khiển đã nói.
DJ van Wyk

Tôi thấy cài đặt <DockPanel Panel.ZIndex="2">giúp sắp xếp điểm vào của các bảng cấp cao nhất.
avenmore

25

<Control KeyboardNavigation.TabIndex="0" ... /> Hoạt động hoàn toàn tốt ... Ví dụ-

<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" />

Sẽ cho phép bạn điều hướng qua hai hộp kết hợp này bằng phím TAB.


13

Tôi nghĩ rằng có một giải pháp dễ dàng hơn nhiều ở đây, ở trên cùng trong tầm kiểm soát hoặc cửa sổ của bạn hoặc bất cứ điều gì, bạn có thể thêm:

KeyboardNavigation.TabNavigation="Cycle"

Điều này cũng tự động bỏ qua các tab đã thu gọn.


6

Một giải pháp thay thế khác đã hiệu quả với tôi trước đây là chỉ cần xóa tất cả các TabIndexcâu lệnh rõ ràng và để các điều khiển sử dụng thứ tự mà chúng được khai báo trong XAML hoạt động kỳ diệu.

Tất nhiên, điều này có thể yêu cầu bạn sắp xếp lại các điều khiển của mình. Nhưng đây là một thao tác sao chép-dán đơn giản.


4
Vấn đề là bạn không thể sắp xếp lại thứ tự các điều khiển trong những thứ như DockPanels mà thứ tự bạn thêm chúng không khớp với thứ tự tab. Ví dụ, hãy xem xét các nút gắn ở bên phải. Bạn gắn thẻ cuối cùng vào đầu tiên, từ giây thứ hai đến giây cuối cùng, v.v. nhưng bạn muốn đảo ngược thứ tự tab. Đó là điều khiến tôi phấn khích nhất. Những lúc như thế này, tôi nhớ những ngày VB6 cũ (không phải ngôn ngữ, chỉ là tính năng này), nơi bạn chọn 'Đặt thứ tự tab' và chỉ cần nhấp qua tất cả các điều khiển của bạn. Đơn giản và ngọt ngào. Bực bội chúng tôi không có bất cứ điều gì như thế ở đây vào năm 2018.
Mark A. Donohoe

0

Bạn có thể sử dụng KeyboardNavigation.TabNavigation = "Không" để hoàn toàn bỏ qua Tabbing để kiểm soát cụ thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.