Sự khác nhau chính xác giữa sự kiện Bubbling và sự kiện Tunneling là gì? Tôi nên sử dụng Sự kiện Bubbling ở đâu và tôi nên sử dụng sự kiện Tunneling ở đâu? Cảm ơn bạn trước!Sự khác biệt giữa các sự kiện Bubbling và Tunneling
Trả lời
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ệnKeydown
.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ụ
previewdownkey
vàpreviewmousebuttondown
. 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.
And last but not least some explanation and another tutorial.
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ó PreviewKeyDown
và KeyDown
, đườ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
- 1. Sự kiện Bubbling và Dừng Tuyên truyền
- 2. Sự khác biệt giữa "sự kiện DOMContent" và "sự kiện tải"
- 3. Sự khác biệt giữa ". +" Và ". +?"
- 4. Sự khác biệt giữa "**/* /" và "** /"?
- 5. Sự kiện Bubbling cho Sự kiện tùy chỉnh trong WPF?
- 6. Sự khác biệt giữa $ (...) và `...`
- 7. Sự khác biệt giữa. và #
- 8. Sự khác biệt giữa $ * và $ @
- 9. Sự khác biệt giữa = và: =
- 10. Sự khác biệt giữa Tải sự kiện, Kích hoạt sự kiện và Nhập sự kiện trong Biểu mẫu
- 11. Sự khác nhau giữa các sự kiện logic và sự kiện gốc trong GWT là gì?
- 12. Sự khác biệt giữa đối tượng sự kiện và biến điều kiện
- 13. Sự khác biệt giữa "hoặc" và "||"
- 14. Sự khác biệt giữa các sự kiện Window.Loaded và Window.ContentRendered là gì
- 15. Sự khác biệt giữa các phương thức sự kiện jquery.simulate.js và jQuery?
- 16. Sự khác biệt giữa các sự kiện đấu dây có và không có "mới"
- 17. Sự khác biệt giữa Kivy và PY4A
- 18. Sự khác biệt về sự khác biệt giữa Matplotlib giữa Agg và Cairo
- 19. Sự khác biệt giữa Tries và Trees?
- 20. Sự khác biệt giữa Camel và BPEL
- 21. Sự khác biệt giữa self.navigationController.navigationItem và self.navigationItem
- 22. Sự khác biệt giữa Proc và Lambda
- 23. sự khác biệt giữa Lazy.Force() và Lazy.Value
- 24. Sự khác biệt giữa UIViewController và UITableViewController
- 25. Sự khác biệt giữa Symfony và Silex
- 26. Sự khác biệt giữa ActivityUnitTestCase và ActivityInstrumentationTestCase2
- 27. Sự khác biệt giữa. và: trong Lua
- 28. Sự khác biệt giữa ServletContext và ServletActionContext
- 29. Sự khác biệt giữa Assembly.CreateInstance và Activator.CreateInstance?
- 30. Sự khác biệt giữa lưu và save_model()
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