2008-12-11 37 views
80

Làm cách nào để đặt thứ tự tab trong WPF? Tôi có một ItemsControl với một số mặt hàng mở rộng và một số bị sụp đổ và muốn bỏ qua những thứ bị sập khi tôi đang tabbing.Đặt thứ tự tab trong WPF

Bất kỳ ý tưởng nào?

+0

Câu trả lời được đề xuất của Jesse là cách để đi ... –

+0

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

Trả lời

55

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 mở rộng.

+0

Bạn cũng có thể lấy nét = "False" để xóa nó khỏi Lấy nét bàn phím cũng như thứ tự tab. –

+1

@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

-9

Ngoài ra .NET 3.0 có một lớp tự động đặt thứ tự tab và bạn có thể ghi đè điều này dựa trên các phần trong biểu mẫu của mình.

(new TabOrderManager(this)).SetTabOrder(TabOrderManager.TabScheme.AcrossFirst); 
+11

Không phải là TabOrderManager chỉ có một lớp Windows Forms? – Krimson

+6

Không hoạt động trong WPF. – theMayer

+2

Đây là một câu hỏi WPF, không phải Windows Forms. – Martin

78

Nếu bạn muốn thiết lập một cách rõ ràng thứ tự tab cho các yếu tố trong hình thức của bạn, tài sản gắn liền sau là nghĩa vụ phải giúp đỡ:

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

tôi nói "phải giúp đỡ" như tôi có không tìm thấy nó rất đáng tin cậy mặc dù tôi có thể cần phải đọc thêm về cách nó được dự định sẽ được sử dụng. Tôi chỉ đăng câu trả lời nửa nướng này bởi 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".

+10

Bí quyết là sử dụng TabIndex với các giá trị khác nhau của KeyboardNavigation.TabNavigation trong phần tử cha. Tôi thấy mình sử dụng TabNavigation "Địa phương" thường xuyên nhất. :) –

+0

Tôi đã phải thêm điều này vào mỗi điều khiển của tôi, thay vì chỉ thêm chúng vào các StackPanels khác nhau lưu trữ các điều khiển cho biết. –

+0

Tôi tìm thấy thiết lập '' giúp đặt hàng điểm vào của các bảng cấp cao nhất. – avenmore

22

<Control KeyboardNavigation.TabIndex="0" ... /> Làm việc hoàn toàn tốt đẹp ... Đối example-

<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 thông qua hai hộp combo sử dụng phím TAB.

9

Tôi nghĩ rằng đó là một giải pháp dễ dàng hơn nhiều ở đây, ở phía trên trong vòng 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" 

này cũng automaticaly bỏ qua các tab sụp đổ.

4

Một thay thế khác đã làm việc cho tôi trong quá khứ là chỉ cần xóa tất cả các tuyên bố rõ ràng TabIndex và để cho các điều khiển sử dụng thứ tự mà chúng được khai báo trong XAML làm việc kỳ diệu của chúng.

Điều này, tất nhiên, 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à thao tác sao chép-dán đơn giản.

Các vấn đề liên quan