2012-07-06 25 views
5

Tôi muốn có một tài sản luôn bị ràng buộc với điều khiển hiện đang tập trung.Có cách nào để liên kết với Keyboard.FocusedElement không?

Tôi đã thấy hai cách để có được quyền kiểm soát hiện tại.

Một ứng dụng đang sử dụng Keyboard.FocusedElement. Thứ hai là duyệt qua cây thị giác.

Vì tôi muốn biết mỗi khi phần tử tập trung thay đổi truyền tải cây trực quan có vẻ như nó sẽ chạy rất nhiều mã mọi lúc.

Nhưng Keyboard.FocusedElement không triển khai INotifyPropertyChanged. Vì vậy, tôi không thể chỉ liên kết với nó bình thường.

Có cách nào để thông báo cho tôi biết khi nào thay đổi không?

(Hoặc một số cách khác để có một tài sản mà luôn đặt cho hiện tập trung kiểm soát?)

LƯU Ý: Rõ ràng tôi có thể thêm một sự kiện vào mỗi kiểm soát và có nó cập nhật một tài sản . Nhưng tôi có rất nhiều điều khiển. Tôi muốn tránh phải đính kèm một sự kiện cho mỗi người trong số họ.

Trả lời

6

Bạn có thể thử để đăng ký Keyboard.GotKeyboardFocus Attached Event

Xảy ra khi một phần tử nhận được tập trung bàn phím.

Dưới đây là ví dụ đăng ký sự kiện OnStartup này. Bạn có thể sử dụng một hành vi đính kèm thực hiện điều này và cập nhật một thuộc tính đính kèm mà bạn có thể liên kết với ví dụ.

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     EventManager.RegisterClassHandler(typeof(UIElement), 
      Keyboard.GotKeyboardFocusEvent, 
      new RoutedEventHandler(Keyboard_GotKeyboardFocus), true); 

     base.OnStartup(e); 
    } 

    private void Keyboard_GotKeyboardFocus(object sender, RoutedEventArgs e) 
    { 
     Debug.WriteLine(e.OriginalSource); 
    } 
} 
+1

Đây thực sự là câu trả lời tuyệt vời! Cảm ơn bạn rất nhiều vì đã chỉ cho tôi điều này. – Vaccano

+0

Điều chắc chắn, vui vì tôi đã có thể giúp :) –

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