2010-01-18 67 views
3

顯然,這個問題的直接答案是「不」,但是對於我來說,實現這種效果的最佳方式是什麼?爲了解釋,這裏有一些背景...只有右鍵事件纔可以將IsHitTestVisible設置爲false?

我有一個應用程序,該應用程序顯示一個圖像加上該圖像上的幾層重疊形狀。所有這些都放置在網格單元格中,彼此重疊,圖像位於本地z順序的底部。爲了提高速度,覆蓋層被實現爲派生自FrameworkElement的類,並且他們創建並管理他們自己的視覺效果。

這裏的層是如何排列的原理圖(雖然爆炸成3D),他們有/需要什麼樣的互動:


overlapped_controls.png http://www.afterbang.co.uk/mal/stackoverflow/overlapped_controls.png


正如你可以看到,上疊加必須允許用戶在圖像的任何地方拖出一個新的矩形。爲此,我給了它一個透明的背景,就像一塊可以畫畫的玻璃板。這個明顯的缺點是它會阻止所有鼠標事件傳遞到較低層。

我真的很想只在最上層的透明區域捕獲鼠標按鈕的事件,並讓其他事件按照z順序進一步擊中圖層。

是否有WPF頭腦的模式我應該關注這種事情?任何一種最佳實踐或技巧?

我對WPF還是比較新鮮的,但是想寫一個與API一致的解決方案。謝謝。

回答

1

我會在需要右鍵單擊的元素上使用PreviewMouseDown事件,並在需要左鍵單擊的元素上使用LeftMouseDownPreviewMouseDown事件仍然會觸發,但您可以編寫處理程序忽略左鍵點擊。

這實際上是我用來在圖像上顯示形狀的模式,以便用戶可以圈選圖像的一部分以突出顯示它。我在圖像上有PreviewMouseDown,它的功能正常,然後我有一個LeftMouseDown在任何形狀的處理程序,以便他們可以被移動,刪除等。

+0

謝謝 - 我已經上傳圖像到一個新的並相應地更新了其網址。希望它能解決它。並感謝PreviewMouseDown上的提示。我已經考慮過了,但不確定這是否是通過書面方式去做的。 – 2010-01-18 18:00:03

+0

嗯,說實話,有時候,「通過書」的方式並不適用於所有情況。在我的情況下,我並沒有將自己的形狀放在自己的層面上。我不太確定官方的做法是什麼,但是'PreviewMouseDown'方式在代碼中看起來非常乾淨,我必須爲我的其他事件設置一切。 – 2010-01-18 19:45:13

+0

我在想你是如何組織你的東西的。在實現它之前,我嘗試了PreviewXXX方法,因爲我的圖像不是邏輯(或可視化)樹中形狀圖層的父代。我真的希望將形狀圖層的邏輯與圖像分開,因此我懷疑我最終會將這兩種東西放入某種父控件中,並使用PreviewXXX事件爲子圖層提供功能。我們拭目以待。 :)如果我想出一些不錯的話,我會在這裏再次發帖。 – 2010-01-18 22:55:10

相關問題