我创建了一个从Canvas派生的自定义类,它包含将从Visual派生的元素。画布还包含我通过创建线创建的网格。
现在进行缩放,我从画布中删除所有内容,调整画布大小(放置在ScrollViewer中),然后重绘其上的所有内容。有没有更好的方法来实现缩放,提供的东西,允许我滚动和缩放,并以某种方式创建一个视口,我可以移动和调整大小(滚动和缩放)?因为我担心的是很快就会有复杂的形状,曲线和点放在画布上,也许会有成千上万的,如果我使用我目前正在使用的方法,事情会变得很慢。
请告诉我们是否有更好的方法。
答案 0 :(得分:5)
如果您不想影响布局,我建议您使用RenderTransform
代替LayoutTransform
。所以像这样:
<Canvas>
<Canvas.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1"/>
</Canvas.RenderTransform>
<!--- other controls -->
</Canvas>
您可能还希望使用UIElement的RenderTransformOrigin
依赖项属性,并且可以通过更改ScaleX
和ScaleY
的值后面的代码进行放大和缩小。< / 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>