2009-12-23 9 views
16

Có cách nào để biết liệu điều khiển (cụ thể là System.Windows.Controls.TextBox) có được tập trung trong Silverlight không? Tôi đang tìm kiếm nội dung nào đó như sau (những gì bạn sẽ thấy trong ứng dụng .Net thường lệ):Phát hiện tiêu điểm của điều khiển trong Silverlight

textBox.Focused 

Điều này có vẻ đơn giản và tầm thường để thoát khỏi tầm kiểm soát, nhưng tôi không thể tìm thấy một câu trả lời ở bất cứ đâu.

Cập nhật

Một giải pháp nhẹ thêm thanh lịch, kết hợp với câu trả lời của Rob, là tạo ra một phương pháp khuyến nông như vậy:

public static bool IsFocused(this Control control) 
{ 
    return FocusManager.GetFocusedElement() == control; 
} 

Trả lời

27

Bạn phải sử dụng FocusManager

bool b = FocusManager.GetFocusedElement() == textBox; 
+1

Cảm ơn. Tôi tự hỏi tại sao Microsoft quyết định xử lý nó theo cách này thay vì cách nó được xử lý ở khắp mọi nơi khác (ngay cả các sản phẩm của riêng họ) ... – Dov

+0

Có lẽ nó giúp giữ cho trình cài đặt nhỏ hơn? –

0

Như ngay sau khi bạn có một điều khiển bao gồm nhiều hơn một yếu tố đầu vào (mà cần phải có tập trung để xử lý người dùng inpu t) yêu cầu FocusManager sẽ không làm thủ thuật nữa. Hãy thử cách này:

private bool HasFocus { get; set; } 

protected override void OnGotFocus(RoutedEventArgs e) 
{ 
    base.OnGotFocus(e); 
    HasFocus = true; 
} 

protected override void OnLostFocus(RoutedEventArgs e) 
{ 
    base.OnLostFocus(e); 
    HasFocus = false; 
}