簡體   English   中英

在 WPF 中“捕獲鼠標”是什么意思?

[英]What does it mean to "Capture the mouse" in WPF?

System.Windows.UIElement有一個CaptureMouse()和一個配對的ReleaseMouseCapture()方法。 在這個WPF DragDrop示例中,他們在 MouseDown 上調用 CaptureMouse 並在 MouseUp 上釋放它。 MSDN 中文檔幾乎沒有用處 - “CaptureMouse -> Captures the mouse”。

在嘗試之前,在我的腦海中,我假設它以某種方式將鼠標鎖定在 UIElement 邊界內,但是當我嘗試時顯然不是這種情況。 從實驗來看,當鼠標在 UIElement 之外時,它似乎與響應事件有關,但不想成為一個貨物崇拜程序員我不想只使用它,因為示例確實如此,我想對其含義的權威描述。

來自 MSDN 上的捕獲和取消捕獲鼠標

當一個對象捕獲鼠標時,所有與鼠標相關的事件都被視為具有鼠標捕獲的對象執行該事件,即使鼠標指針在另一個對象上也是如此。

只有捕獲控件接收鼠標事件,直到釋放。

捕獲鼠標對於拖動很有用,因為所有拖動代碼都可以存在於一個控件中,而不是分布在多個控件上。

當它捕獲鼠標時,即使鼠標指針不再在其邊界區域內,控件也會接收鼠標事件。

通常,它用於:

  • 拖放
  • 按鈕(當您將鼠標放在按鈕上並在釋放按鈕之前移動鼠標時處理鼠標向上)

Silverlight 2 文檔對它有更詳細的描述,我不知道為什么它也不是 3.5 文檔頁面的一部分:

當一個對象捕獲了鼠標時,無論鼠標指針是否在其邊界區域內,該對象都會接收鼠標輸入。 通常僅在模擬拖動操作期間捕獲鼠標。
...

它與 WPF 的工作方式相同,因此它與 DragDrop 一起使用的原因是當鼠標可能超出該控件時,它知道如何向被拖動的控件報告。 如果您注釋掉 MyCanvas.Capture() 和 Capture(Null)(清除它),那么您將無法再刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM