[英]How to use AddHandler to add event handler for a LostKeyBoardFocusEvent on a button in WPF
[英]Why is there no MouseMoveEvent — or, how to use AddHandler for the mouse move event
UIElement類定義靜態RoutedEvent
成員MouseLeftButtonDownEvent
和MouseLeftButtonUpEvent
- 但是沒有MouseMoveEvent
。 據我所知,框架層次結構中的任何類都沒有。 有常規事件定義:
public event MouseEventHandler MouseMove;
所以你可以寫:
void AttachHandler(UIElement element)
{
element.MouseMove += OnMouseMove;
}
但是你不能使用另一種形式,它允許你訂閱甚至處理過的事件:
void AttachHandler(UIElement element)
{
element.AddHandler(UIElement.MouseMoveEvent, new MouseEventHandler(OnMouseMove), true);
}
所以我的問題是雙重的:
MouseMoveEvent
? 編輯
我看到MSDN文檔承認這是一個限制 :
此技術的局限性在於AddHandler API采用RoutedEvent類型的參數來標識所討論的路由事件。 並非所有Silverlight路由事件都提供RoutedEvent標識符,因此這種考慮會影響在Handled案例中仍可處理哪些路由事件。
編輯#2
根據@HansPassant,一般的答案是“MouseMove”事件不能被標記為“已處理”,因此它們總是冒泡。 除了明顯的邊緣情況之外,TextBox也是如此:當您單擊TextBox的文本區域,從而激活拖動到選擇的東西時,“MouseMove”事件不再被觸發。 我不知道為什么會這樣。
注意 - 對於任何好奇的人 - 我正在嘗試編寫一個允許用戶拖放TextBox的行為。 TextBox控件默認攔截鼠標事件,以允許文本選擇。
它在MSDN文章中明確提到:
MouseMove不能與AddHandler一起使用,因為其事件數據中沒有Handled
所以這回答了你的問題:
為什么在任何地方都沒有定義MouseMoveEvent?
因為不需要。
是否有一種解決方法,允許您獲取MouseMove事件的通知,即使它們被處理?
你不需要一個,它們無法處理,因此總是冒泡。 Window的MouseMove事件處理程序將看到它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.