WPF xử lý toàn bộ cây giao diện người dùng dưới dạng một phạm vi Tab duy nhất. Nó không được chia thành các khu vực nhỏ hơn như bạn mong đợi. Điều này bao gồm các điều khiển bên trong UserControls.
Thí dụ, nếu bạn có
<StackPanel>
<TextBox Name="TextBox1" />
<MyUserControl />
<TextBox Name="TextBox3" />
</StackPanel>
Và MyUserControl
trông giống như
<MyUserControl>
<TextBox Name="TextBox2" />
</MyUserControl>
Chu kỳ tab mặc định sẽ là TextBox1, TextBox2, TextBox3. Điều này là do không có thuộc tính TabIndex được xác định, vì vậy tất cả các điều khiển đều chạy theo thứ tự tab mặc định, là thứ tự mà chúng được thêm vào giao diện người dùng.
Nếu bạn đặt tabIndex trên điều khiển của bạn như dưới đây,
<StackPanel>
<TextBox Name="TextBox1" TabIndex="1" />
<MyUserControl TabIndex="2" />
<TextBox Name="TextBox3" TabIndex="3" />
</StackPanel>
tabbing của bạn sẽ thay đổi để TextBox1, TextBox3, TextBox2. Điều này là bởi vì TextBox2 không có một TabIndex được chỉ định, do đó, mặc định được giả định và nó được tabbed để sau khi tất cả các điều khiển khác với một TabIndex quy định có được chu kỳ thông qua.
Cách tôi thường nhận được xung quanh điều này là để ràng buộc các TabIndex
điều khiển bên trong UserControl để UserControl.TabIndex.
Ví dụ thêm các ràng buộc sau vào UserControl sẽ làm cho chu kỳ Tab đúng một lần nữa
<MyUserControl>
<TextBox Name="TextBox2" TabIndex="{Binding Path=TabIndex, RelativeSource={RelativeSource AncestorType={x:Type local:MyUserControl}}}" />
</MyUserControl>
Tôi thường thích để thiết lập này ràng buộc trong trường hợp Loaded
của UserControl thay vì phải nhớ để thiết lập này ràng buộc trên tất cả các điều khiển bên trong UserControl. Tôi chắc rằng cũng có nhiều cách hiệu quả hơn để làm điều này, tuy nhiên vấn đề không xuất hiện thường xuyên đủ để tôi ngồi xuống và dành thời gian nghiên cứu cách sử dụng đúng các phạm vi tab để tránh cách giải quyết này.
thế nào là bạn thiết lập các thuộc tính TabIndex cho điều khiển của bạn trong mã-phía sau cho giao diện này? Bạn cần phải rõ ràng hơn về những gì không hoạt động. Đăng một số mã. – Bernard
Bạn có ý nghĩa gì bởi 'không hoạt động'? Có phải 'bạn nhấn Tab nhưng tiêu điểm sẽ không di chuyển'? Hoặc nó di chuyển, nhưng di chuyển sai? Trong đó có cách nào sai? –
Bạn đã xem lớp [KeyboardNavigation] (http://msdn.microsoft.com/en-us/library/aa969768.aspx#Keyboard_Navigation) chưa? – rfmodulator