2009-04-30 24 views
8

Bất cứ ai có thể cho tôi biết cách điều hướng theo chương trình thông qua tất cả tab yếu tố UI dừng trong ứng dụng WPF? Tôi muốn bắt đầu với tab dừng đầu tiên đánh hơi yếu tố tương ứng, hãy truy cập vào tab dừng tiếp theo, đánh hơi phần tử tương ứng, v.v. cho đến khi tôi đến tab dừng cuối cùng.Làm cách nào để điều hướng tab phần tử giao diện người dùng WPF có lập trình dừng?

Cảm ơn, - Mike

Trả lời

27

Bạn làm điều đó bằng MoveFocus như trong bài viết này MSDN mà giải thích tất cả mọi thứ về tập trung: Focus Overview.

Dưới đây là một số mã mẫu để đến phần tử tập trung tiếp theo (lấy từ bài viết đó, được sửa đổi một chút).

// MoveFocus takes a TraversalRequest as its argument. 
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next); 

// Gets the element with keyboard focus. 
UIElement elementWithFocus = Keyboard.FocusedElement as UIElement; 

// Change keyboard focus. 
if (elementWithFocus != null) 
{ 
    elementWithFocus.MoveFocus(request); 
} 
+0

genial, cảm ơn bạn rất nhiều! – lamarmora

1

Bạn có thể thực hiện việc này bằng cuộc gọi MoveFocus. Bạn có thể lấy mục hiện đang được tập trung thông qua FocusManager. Đoạn mã sau sẽ lặp lại tất cả các đối tượng trong cửa sổ và thêm chúng vào một danh sách. Lưu ý rằng điều này sẽ thay đổi vật lý cửa sổ bằng cách chuyển tiêu điểm. Rất có thể mã sẽ không hoạt động nếu cửa sổ không hoạt động.

// Select the first element in the window 
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.First)); 

TraversalRequest next = new TraversalRequest(FocusNavigationDirection.Next); 
List<IInputElement> elements = new List<IInputElement>(); 

// Get the current element. 
UIElement currentElement = FocusManager.GetFocusedElement(this) as UIElement; 
while (currentElement != null) 
{ 
    elements.Add(currentElement); 

    // Get the next element. 
    currentElement.MoveFocus(next); 
    currentElement = FocusManager.GetFocusedElement(this) as UIElement; 

    // If we looped (If that is possible), exit. 
    if (elements[0] == currentElement) 
     break; 
} 
+0

Đoạn mã trên không hoạt động trên cửa sổ WPF của tôi. Danh sách kết thúc là trống. Hàm GetFocusedElement() đầu tiên trả về null. Tôi đồng ý mã này chính xác phù hợp với tài liệu, nhưng tiếc là nó không làm việc cho tôi. Tôi đang tìm hiểu lý do tại sao. –

+1

Bạn gọi mã ở đâu? Lưu ý rằng cửa sổ phải được kích hoạt để constructor chắc chắn ra ngoài. OnLoad có thể hoạt động, tôi đã sử dụng Activated được gọi mỗi khi bạn kích hoạt cửa sổ. –

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