2009-10-24 26 views
1

我正在處理交互式WPF圖形/樹工具,並將它們之間的節點和鏈接放置在畫布中。節點是用戶控件,鏈接只是線條形狀,當前鏈接從一個節點的中心到另一個節點的中心。剪輯在一個畫布中的WPF元素

當我希望節點稍微透明並且可以看到節點後面的鏈接時,就會出現問題。 我認爲最方便的解決方案是將裁剪或不透明遮罩應用於線條,所以它們不會繪製在節點後面,但我不能爲我的生活弄清楚如何?

基本上我無法從節點中找出一個邊界框幾何體來用作線的剪切幾何體。當然,我也對替代解決方案感興趣!

回答

1

在我看來,你似乎在過度解決問題。爲什麼不只是改變鏈接的邏輯,以便線條在節點的正確一側開始/結束,而不是從中心開始?你只需要做更多的數學來完成這一點。

也就是說,要獲得Visual的邊界框,可以使用VisualTreeHelper::GetContentBounnds輔助方法。

+0

是的邊界,我想到這一點,但是有兩個原因,我不喜歡這樣的做法。 1)我在畫布中使用平移和縮放,並且節點大小也因內容和每節點縮放轉換而異。我發現很難弄清楚畫布座標中節點的確切尺寸。我知道這是可行的,我只是掙扎了一下。 2)即使我知道節點的確切邊界,如果線條和節點邊緣不垂直,畫粗線來加入邊界會產生僞像。如果我用節點幾何體剪切線,它會無縫地連接它們。 – angularsen

+0

夠公平的,我可以告訴你如何獲得邊界框。我會更新我的答案。 –

+0

謝謝,那正是我一直在尋找的! – angularsen

0

我們研究了類似的東西,我們的解決方案是將鏈接和節點放在不同的圖層上。

因此,如果您希望節點出現在節點隱藏的鏈接和鏈接提示之上,只需更改這些圖層的z順序,以便節點圖層位於鏈接前面即可,層。

由於我們使用VisualHosts(您會發現一個VisualHost類here)的圖層,我們的節點和鏈接對象是DrawingVisuals。

工作正常,你不必費盡口舌如何找到您的節點等

+0

問題在於稍微透明的節點,線條會顯示在它們後面。這就是爲什麼我想讓這些線在節點邊緣結束的原因。 – angularsen