2012-03-30 47 views
6

Tôi có một màn hình tìm kiếm trong ứng dụng WPF của mình. Màn hình được thực hiện như một UserControl trong một TabItem của một TabControl. Khi người dùng chuyển sang tab Tìm kiếm, tôi muốn trọng tâm đi vào một trường cụ thể. Vì vậy, tôi đã thêm một trình xử lý sự kiện được nạp vào thẻ UserControl trong Xaml và tôi gọi phương thức Focus của điều khiển mà tôi muốn có tiêu điểm ban đầu trong trình xử lý sự kiện được tải. Điều này làm việc tuyệt vời cho đến khi tôi nâng cấp thư viện điều khiển Telerik tôi đang sử dụng ngày hôm nay. Bây giờ, khi tôi chuyển sang tab Tìm kiếm, tiêu điểm KHÔNG ở trong trường tôi muốn có nó, nhưng tôi không thể biết điều khiển nào có tiêu điểm.Làm cách nào để tìm hiểu vị trí tập trung trong ứng dụng WPF của tôi?

Trường tôi muốn lấy tiêu điểm đã có bộ xử lý sự kiện GotFocus & sự kiện LostFocus vì các lý do khác. Tôi nhớ rằng trong Win Forms, các đối số xử lý sự kiện LostFocus cho bạn biết điều khiển nào sẽ lấy tiêu điểm. Vì vậy, tôi đặt một breakpoint trong xử lý LostFocus của tôi & phát hiện ra rằng các đối số cho xử lý sự kiện LostFocus trong WPF không bao gồm thông tin đó.

Làm cách nào tôi có thể tìm ra vị trí tập trung đi mà không cần đặt trình xử lý GotFocus trên mọi điều khiển trong UserControl của tôi?

Tony

Trả lời

5

Bạn có thể thử đặt điểm ngắt của mình trên LostKeyboardFocus Sự kiện được đính kèm thay vì sự kiện LostFocus. Nó sử dụng lớp KeyboardFocusChangedEventArgs mà không có các thuộc tính cho biết phần tử nào đã tập trung và vị trí trọng tâm sẽ đi đến đâu.

private void textBox1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    textBox1.Text = ((FrameworkElement)e.NewFocus).Name ; 
} 
+0

Cảm ơn, đây là những gì tôi cần. Tôi không thể dễ dàng biết nơi tập trung diễn ra bởi vì nó đã đi đến một hộp kiểm tôi có trên mẫu, và điều này cho thấy tập trung bằng cách đặt một hộp xung quanh bên trong hộp kiểm. Nó rất nhỏ và khó nhìn thấy trừ khi bạn đang thực sự tìm kiếm nó. Ít nhất, nó là trong ứng dụng của tôi. –

+0

@Tony Tôi rất vui vì nó đã giúp ích. –

8

Cố gắng nhấn Tab Key và xem nếu nó giúp bạn tìm thấy sự kiểm soát tập trung.

Bạn cũng có thể sử dụng Snoop như đề xuất trong Q này/A: Any tips on debugging focus issues in WPF?

Đối với người mới bắt đầu, Snoop cho thấy các yếu tố tập trung hiện tại và hiện tại FocusScope trong thanh trạng thái.

Bạn có thể lấy nó để cho bạn thấy tất cả các sự kiện GotFocus và LostFocus:

1. Run your app. 
2. Run Snoop. 
3. Choose your app in the dropdown. 
4. Click the binoculars ("Snoop") button. 
5. On the right pane, click the Events tab. 
6. Click to bring down the dropdown. 
7. Scroll down to the Keyboard section and check GotKeyboardFocus, LostKeyboardFocus, and optionally the PreviewXXX events. 
8. Now do what you need to do to manipulate focus and watch the Snoop window. 

Tương tự, bạn có thể theo dõi các sự kiện FocusManager theo cùng một cách.

+0

Cảm ơn, tôi sẽ chụp ảnh vào buổi sáng. –

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