2011-09-03 78 views
3

我創建了一個從Canvas派生的自定義類,它包含將從Visual派生的元素。畫布還包含我通過創建線條創建的網格。Canvas放大和縮小,是否有更好的實現方法?

現在爲了縮放,我從畫布中刪除所有內容,調整畫布的大小(放置在ScrollViewer內),並重新繪製它上面的所有內容。有沒有更好的方式來實現縮放,提供的東西,它允許我滾動和縮放,並以某種方式創建一個視口,我可以移動和調整大小(滾動和縮放)?因爲我擔心很快就會出現複雜的形狀,曲線和放置在畫布上的點,也可能是成千上萬的點,如果我使用我目前使用的方法,事情會變得非常緩慢。

請告訴我們是否有更好的方法。

回答

5

如果你不想影響佈局,那麼我建議你使用RenderTransform而不是LayoutTransform。因此,像這樣:

<Canvas> 
    <Canvas.RenderTransform> 
     <ScaleTransform ScaleX="1" ScaleY="1"/> 
    </Canvas.RenderTransform> 
    <!--- other controls --> 
</Canvas> 

你也可以想用UIElement的RenderTransformOrigin依賴屬性,你可以做放大和縮小,從後面的代碼改變ScaleXScaleY值。

順便說一句,你還要做你想做的事之前仔細閱讀本: