我在畫布上放置了一條線(讓它稱爲第1行),並附加了一個鼠標進入,鼠標離開,鼠標向上和鼠標向下的事件。然後創建另一行(第2行),並附上相同的事件。當選擇任何行時,所有事件都可以正常工作。 由於某些原因,當創建的第一行被拖動並釋放到創建的第二行時,該行不會在畫布上釋放,但它仍粘在鼠標指針上,直到從第二行刪除另一個單擊爲止。當創建的最早的行被拖到較新的行而不是相反時發生此問題(當行1被拖動並釋放在行2上時發生問題,但反之亦然,或者行1在2和3上,行2在行3上時發生等 我不知道是什麼代碼可能對這個問題的解決幫助,會有人有任何建議或也許也遇到了類似的問題在Silverlight中選擇和取消選擇重疊圖形
0
A
回答
0
的原因觀察到的行爲是很容易推導出:?
Panel
中的所有元素的確有一個隱含的z順序,它將在沒有爲en元素指定ZIndex
屬性時生效。以前添加的元素的z順序比後面添加的元素的x更低(xaml標記從上到下解析) ttom和之前發生的元素會在前面添加)。
現在,如果您開始移動元素並且兩個元素重疊,則z順序仍然有效。所以您之前添加的行將被視爲物理位於其他行的下方,並且所有鼠標事件都將按照z順序進入最上面的行。因此MouseUp事件不會被您移動的元素接收,並且它仍粘在鼠標指針上,直到您將鼠標從重疊區域移開並再次釋放鼠標。
我能想到的幾種方法來解決這個問題:
也許最簡單的事情將是剛剛設置的元素上明確ZIndex
只要你選擇它,當你移動它周圍將永遠是所有其他元素的頂部,當你在任何地方釋放它時,你可以再次清除ZIndex。一些示例代碼,給你一個想法:
private void OnElementSelected()
{
// todo: maybe we need to store the previous zindex value and re-assign it later
// to prevent it from getting lost
Canvas.SetZIndex(this, Int32.MaxValue);
}
private void OnElementReleased()
{
this.ClearValue(Canvas.ZIndexProperty);
// todo: maybe re-assign stored z-index value
}
另一種解決辦法是有一個透明的MouseEventObserver放置在你的整個Canvas
是被立即激活,你選擇一個元素,那麼你的元素的順序沒有按」沒關係。
編輯
一個很好的事實(很多開發者可能不知道的)有關Canvas.ZIndex
附加屬性:它適用於所有的面板類型,不僅爲Canvas
。因此,您甚至可以用Canvas.ZIndex
指定Grid
內的元素的z順序。
相關問題
- 1. 取消選擇Silverlight TreeViewItem重新選擇
- 2. 複選框,取消選擇和選擇
- 3. jQuery UI選項卡,選擇/取消選擇(摺疊)事件
- 4. 重置/取消選中/取消選擇用戶在Questionair/Survey上的選擇
- 5. Devexpress gridview選擇和取消選擇groupwise
- 6. AQGridView選擇和取消選擇
- 7. UICollectionView選擇和取消選擇問題
- 8. 如何選擇和取消選擇Android
- 9. UITableView選擇和取消選擇
- 10. QListWidget取消選擇和多項選擇
- 11. 選擇/取消選擇ToolStripButton
- 12. 在選擇框中選擇並取消選擇多個選項
- 13. 如何選擇和取消選擇Powerpoint形狀
- 14. 複選框在javascript中選擇和取消選擇功能
- 15. 「選擇/取消選擇」多重選擇字段
- 16. 如何選擇和取消選擇縮略圖圖像iphone
- 17. 在WPF中選擇圖形和形狀
- 18. 多重選擇取消選擇和殘疾人
- 19. 不允許在列表框中取消選擇/取消選擇
- 20. 在div中選擇和取消選擇幫助在jquery
- 21. 取消選擇struts2從javascript中選擇
- 22. jQuery日期選擇器多選擇和取消選擇
- 23. 取消選擇
- 24. 在fullcalendar每月視圖中選擇並取消選擇多天
- 25. 在對話框中取消選擇的視圖選擇顯示
- 26. jQuery選擇選項取消選擇
- 27. 如何取消選擇堆疊面板?
- 28. 取消選擇在UITableViewCell中
- 29. 在UICollectionView中的選擇和取消選擇swift 2
- 30. 在collectionview中選擇和取消選擇行時出錯
非常感謝回覆:) 在我的情況下,每個元素在創建時都已經被賦予一個明確的z-index,總是比前一個元素大一個值,但這個問題仍然存在。我試圖改變鼠標上的畫布z-index和鼠標向下,因爲我有一個屬性來顯示一個元素是否被拖動,但是這不能解決問題。可能還有其他問題?並感謝您的耐心。 – Maeglin77
無論您是分配一個明確且連續遞增的Z-Index屬性,還是隱式z順序生效都無關緊要。每當你移動一個較早的附加元素時,它將不可避免地位於後面添加的元素之下。因此,您必須確保當前選定並移動的元素具有當前存在的所有z-索引中最高的元素。我不明白爲什麼操縱畫布的Z-index應該以任何方式解決問題。 – Martin
非常感謝您的建議:) – Maeglin77