2012-09-13 33 views
0

我正在嘗試創建一個WPF程序,用戶可以在其中拖動多邊形的頂點上的裝飾器來拉伸和調整形狀。當頂點被鼠標抓住並拖動時,它將重新繪製該頂點在該位置的多邊形。我知道可以修改整體形狀的寬度/高度字段,但我想要做的是隻更改頂點位置,並使用多邊形線重新繪製具有新頂點位置的新多邊形。拖動裝飾器來調整多邊形的尺寸

到目前爲止,我可以繪製靜態大小的多邊形(矩形),並將角色定位在角上,但問題似乎是,當您拖動裝飾器時,裝飾器框不會停留在多邊形頂點上。我相信這是因爲裝飾者是相對於多邊形(它的裝飾元素)的位置繪製的,而不是它正在繪製的整個畫布。

我想知道是否有方法將裝飾者簡單地定位到屏幕座標而不是相對於形狀。我的邏輯是,我可以在多邊形頂點處使用onRender()作爲位置來繪製一個裝飾器框,並通過鼠標拖動功能獲取鼠標的位置並直接更改多邊形的頂點,從而也可以更改繪製裝飾器的座標。到目前爲止,我還沒有找到辦法做到這一點。這甚至有可能嗎?裝飾者可以始終在頂點上繪製,以便在形狀被調整大小時與它對齊?如果沒有人知道另一種方式來做到這一點?

回答

0

玩了一下後,我來到了解決方案。首先,瞭解WPF如何處理裝飾渲染是非常重要的。這真的幫了我很大的忙,並給出了一個很好的解釋:Why does my adorner not re-render when the element it's applied to changes?

對我來說,主要問題是我需要調用invalidateVisual()來手動調用OnRender()函數來更改裝飾器/多邊形頂點位置。另一件事是確保您的Stretch屬性設置爲none。我已經把它設置爲填充,它會抵消點,不允許它正確渲染。在此之後,確保裝飾者OnRender()函數通過將polygon.points porperty傳遞給裝飾器的繪製調用來在多邊形的頂點上繪製裝飾器。