2013-03-19 31 views
6

Tôi có một Điều khiển người dùng có nhiều thành phần con, bao gồm hộp kiểm và hộp văn bản.Ngăn chặn LostFocus bị kích hoạt khi các phần tử con bị mất tiêu điểm

Tôi muốn kích hoạt sự kiện LostFocus cho Điều khiển người dùng của tôi chỉ khi tiêu điểm bị mất trên toàn bộ Kiểm soát người dùng (ví dụ: nhấp vào nút bên ngoài Kiểm soát người dùng).

Hiện tại, sự kiện LostFocus cũng đang kích hoạt khi tôi di chuyển giữa các phần tử con của Kiểm soát người dùng của tôi, ví dụ: từ một hộp văn bản đến hộp văn bản khác.

Trả lời

-1
protected override void OnLostFocus(EventArgs args) 
{ 
     if (!ContainsFocus) 
     { 
      // Only do something here 
     } 
} 

Bí quyết là để kiểm tra ContainsFocus

Trong constructor của bạn, bạn sẽ có lẽ sẽ phải thêm mã tương tự như sau để nắm bắt trọng tâm mất kiểm soát con bạn (vì bạn sẽ không có được thông báo trực tiếp khi họ mất tập trung đến một nơi khác) bằng cách gọi

CaptureLostFocus(this); 

và thực hiện:

void CaptureLostFocus(Control control) 
{ 
     foreach(Control child in control.Controls) 
     { 
      child.LostFocus += (s, e) => OnLostFocus(e); 
      CaptureLostFocus(control); 
     } 
} 
+4

Từ những gì tôi có thể thấy, không có ContainsFocus trong WPF để kiểm tra – binncheol

+0

Tôi không nghĩ rằng có một thuộc tính điều khiển trên một điều khiển hoặc. – Ben

+1

Làm thế nào điều này đã không được giảm giá? Có vẻ như nó đang nói về winforms, chứ không phải wpf. – person27

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