2010-07-16 138 views
4

我創建了一個非常簡單的測試控件,它在畫布上有一個Rectangle(在其他容器中,但無關緊要)。 Rectangle具有鼠標放下,鼠標移動和鼠標移動的事件處理程序。如果我在Rectangle的MouseLeftButtonDown事件中捕獲鼠標,我沒有收到相應的MouseLeftButtonUp事件。鼠標捕獲後Silverlight鼠標事件丟失了嗎?

一些代碼:

private void rect1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if (_captured = CaptureMouse()) 
    { 
     _offset = new Point(Canvas.GetLeft(rect1), Canvas.GetTop(rect1)); 
     _origin = e.GetPosition(RootCanvas); 
     e.Handled = true; 
    } 
} 


private void rect1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    if (_captured) 
    { 
     ReleaseMouseCapture(); 
     _captured = false; 
     e.Handled = true; 
    } 
} 

我重視的容器元素的事件處理程序以及,只是爲了確保他們的一個不以某種方式得到鼠標釋放事件,但他們都不是。我還沒有學到Silverlight中對此的期望嗎?

+0

我注意到我正在開發的一個WPF應用程序中的類似問題,但因爲我試圖在按下其他鼠標按鈕時捕獲鼠標而將其解決。意識到它不適用於除左鍵之外的任何其他操作,我放棄了這種方法,並且沒有進一步調查問題。 – ChrisF 2010-07-16 13:48:00

回答

2

我覺得你對實際捕獲鼠標事件的內容有些困惑。

考慮一下,當你這樣做: -

if (_captured = CaptureMouse()) 

什麼對象是CaptureMouse實際上是被稱爲對抗?

回答:您的代碼是代碼隱藏的用戶控件。如果你想要矩形捕捉鼠標,你應該這樣做: -

if (_captured = rect1.CaptureMouse()) 
+0

不那麼困惑,因爲沒有注意。這是我一天的面部片刻。感謝您指出應該顯而易見的內容。 – redman 2010-07-16 15:10:27

1

CaptureMouse();從mouseDown事件,然後嘗試。