2013-05-24 42 views

Trả lời

30

WPF cung cấp cho chúng tôi một số cơ chế khác nhau để xử lý sự kiện - chúng đang sủi bọt, đường hầm và trực tiếp. Đây là tất cả được gọi là Sự kiện được định tuyến.

sự kiện trực tiếp

Bạn có lẽ đã quen với sự kiện được định tuyến trực tiếp. Đây là nơi chính mục đó xử lý sự kiện đã xảy ra. Một ví dụ tốt là sẽ xử lý anh ta onClick -kết thúc nút chuột theo tiêu chuẩn WinForms. Đây là nơi sự kiện được nâng lên trong mục GUI và được xử lý bởi phần tử GUI đã nói.

Bọt Event

Bây giờ tất cả chúng ta thích một số bong bóng ở dạng này hay dạng khác. Sủi bọt xảy ra khi sự kiện không được xử lý bởi phần tử (nói một số textbox) và sự kiện "bong bóng" theo cách của nó lên vùng chứa giao diện người dùng giữ nó. Ví dụ: , giả sử bạn có cửa sổ chứa bảng điều khiển và bên trong bảng điều khiển đó bạn có lưới và bên trong lưới bạn có hộp văn bản. Nếu sự kiện không được xử lý bởi hộp văn bản, nó sẽ di chuyển, được thông qua hoặc "bong bóng" lên đến cấp độ lưới (vì lưới chứa hộp văn bản), nếu nó không được xử lý ở cấp đó thì sự kiện lên "cây" (được gọi là cây thị giác) vào bảng điều khiển nơi có thể hoặc không thể xử lý . Quá trình này tiếp tục cho đến khi nó được xử lý hoặc sự kiện "thoát" là phần tử hàng đầu nhất.

Ví dụ về sự kiện bong bóng sẽ giống như sự kiện MouseButtonDown. Hoặc một sự kiện Keydown.

Tunneling

Tunneling là đối diện của Bọt. Vì vậy, thay vì một sự kiện sẽ chuyển sang cây hình ảnh , sự kiện sẽ di chuyển xuống cây thị giác về phía yếu tố được coi là nguồn. Định nghĩa WPF tiêu chuẩn định nghĩa của sự kiện đường hầm là tất cả bắt đầu bằng "xem trước" ví dụ previewdownkeypreviewmousebuttondown. Bạn có thể bắt chúng trên đường đến phần tử "đích" và xử lý nó. Ví dụ cho điều này có thể là bạn có một số điều khiển bên trong một điều khiển lưới và vì một lý do nào đó bạn đã quyết định rằng không có quyền kiểm soát trong phạm vi lưới đó sẽ được phép có chữ "t".

Source với ý kiến ​​của tác giả mà tôi không hỗ trợ hoặc không đồng ý.

And another StackOverflow question which is pretty much the same.

A nice demo project

And last but not least some explanation and another tutorial.

+1

Thực sự tốt giải thích, nhờ 1. BTW, liên kết cho "Một dự án demo đẹp" hiện đã chết. – Sabuncu

2

Như một sự khởi đầu: quy ước đặt tên trong WPF cho một số sự kiện mặc định là Preview<event> cho đường hầm và <event> cho bọt. Vì vậy, ví dụ cho KeyDown chúng ta sẽ có PreviewKeyDownKeyDown, đường hầm và bọt khí tương ứng.

Sự khác biệt giữa hai, như quy ước đặt tên ngụ ý, là một sự kiện đường hầm sẽ bắt đầu tại nút cao nhất trong cây (có thể là cửa sổ) và đi xuống con thấp nhất. Một sự kiện sủi bọt sẽ bắt đầu từ đứa trẻ và sau đó đi lên trở lại.

Hướng dẫn này nên giải thích rõ ràng: http://www.codeproject.com/Articles/464926/To-bubble-or-tunnel-basic-WPF-events

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