2011-09-03 74 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值。

顺便说一句,你还要做你想做的事之前仔细阅读本: