Canvas放大和缩小,是否有更好的实现方法?

时间:2011-09-03 22:33:53

标签: c# .net wpf

我创建了一个从Canvas派生的自定义类,它包含将从Visual派生的元素。画布还包含我通过创建线创建的网格。

现在进行缩放,我从画布中删除所有内容,调整画布大小(放置在ScrollViewer中),然后重绘其上的所有内容。有没有更好的方法来实现缩放,提供的东西,允许我滚动和缩放,并以某种方式创建一个视口,我可以移动和调整大小(滚动和缩放)?因为我担心的是很快就会有复杂的形状,曲线和点放在画布上,也许会有成千上万的,如果我使用我目前正在使用的方法,事情会变得很慢。

请告诉我们是否有更好的方法。

2 个答案:

答案 0 :(得分:5)

如果您不想影响布局,我建议您使用RenderTransform代替LayoutTransform。所以像这样:

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

您可能还希望使用UIElement的RenderTransformOrigin依赖项属性,并且可以通过更改ScaleXScaleY的值后面的代码进行放大和缩小。< / p>

顺便说一句,在做你想做的事之前,你也想读这些:

答案 1 :(得分:4)

从它的声音来看,似乎使用scale transform将允许您执行所需的缩放,而无需重新绘制所有内容。

来自:Is it possible to ScaleTransform everything on a Canvas/Grid except for 1 Control?

<Canvas>
    <Canvas.LayoutTransform>
        <!-- Adjust ScaleX and ScaleY in lock-step to zoom -->
        <ScaleTransform ScaleX="1" ScaleY="1" CenterX=".5" CenterY=".5" />
    </Canvas.LayoutTransform>
    <!-- Some controls here -->
/>
</Canvas>