2012-06-30 77 views
0

我有一個相當複雜的視圖,在選項卡控件中有多個選項卡。在一個選項卡上有一個裝飾層控件。 Adorner層在MouseLeftButtonDown事件處理函數中調用CaptureMouse來捕獲鼠標輸入。一切正常。WPF:爲什麼CaptureMouse可能會失敗?

但是,如果我按特定順序切換視圖上的選項卡,然後單擊裝飾器圖層,它將無法捕獲鼠標輸入:CaptureMouse()返回false。 Mouse.Captured同時返回null。控制主機adorner層繼續正常工作,甚至能夠捕獲鼠標。

無法提供任何代碼,因爲有許多自定義控件正在運行。在簡化的佈局中,一切正常。

爲什麼CaptureMouse可能會失敗?

回答

2

確保在您調用ReleaseMouseCapture()的MouseLeftButtonUp事件處理程序中,否則您的原始adornerlayer將保留它。

還要檢查,以確保你沒有任何控制進一步上漲,它們也捕捉鼠標的鏈(可以設置處理,以真正在你的裝飾器層,以防止)

編輯:另外,還要確保IsEnabled是真實的。

5

如果IInputElementUIElementUIElement3DIsVisibleIsEnabled必須是true

如果IInputElementContentElement,沒有IsVisible所以才IsEnabled必須true。這當然是在你撥打Mouse.Capture的時候。另外,IInputElement包含視覺的PresentationSource必須有IMouseInputProvider

我認爲這裏的問題要麼是立即拍攝的另一個元素,要麼是IsVisiblefalse,當時您撥打Capture

相關問題