要解釋沒有圖像和無代碼的問題並不容易。對於那些有興趣的,我做了一個示例C#/ WPF項目,可以從下載http://rapidshare.com/files/461745095/02.WPFControlEvents.rarWPF中的MouseEnter和MouseLeave處理(使用VS2008和.net 3.5)未按預期工作
這是一個非常小的項目(45KB)。問題如下(對於扭曲的描述,我對此表示歉意):
「幻想」(而相當醜陋)按鈕包含一個堆棧面板,其中包含1)標籤,2)畫布3。 )兩(2)個同心橢圓,全部從左至右排列。
有一個用於堆棧面板的MouseEnter和MouseLeave事件處理程序,它在標題欄中顯示一條消息,指示鼠標是在堆疊面板上還是在其外面。
問題是:當鼠標懸停在標籤上(又包含在堆疊面板中)時,(正確)報告鼠標位於堆棧面板上。當鼠標移動到畫布上時(也包含在堆疊面板中),鼠標(錯誤地?)報告爲而不是在堆疊面板上,但是當鼠標向右移動一點時(通過兩個橢圓,這是在畫布上),鼠標被報告再次在堆疊面板上。
爲什麼當鼠標懸停在畫布上時,它被報告沒有超過堆棧面板,但是當鼠標懸停在橢圓上(畫在畫布上)時,它被報告在堆棧面板上。
謝謝您解決問題,
John。
我沒有答案,爲什麼會出現這種情況,但實際的解決方法可能是使用網格來佈置Label和Ellipse對象,使用Margin屬性來定位兩個省略號。這可以避免嵌套的容器,這可能會導致行爲。 – 2011-05-10 16:04:52
@丹:我試過你的建議。即使Canvas的背景被設置爲不透明(如CodeNaked下面所示),但使用網格並不會出現問題。謝謝。 – Hex440bx 2011-05-10 16:27:03
@任何人可能會閱讀這個試圖理解/解決同樣的問題:只改變爲網格_seemed_解決了問題,因爲它使標籤佔據了網格的整個寬度。被擊中的標籤以及在畫布上方掩蓋了問題的持續存在。查看CodeNaked的最後(或接近尾聲)評論,以更好,更完整地解釋在這種情況下發生的事情。 – Hex440bx 2011-05-10 17:09:51