C# 画布放大和缩小,有更好的实现方法吗?

C# 画布放大和缩小,有更好的实现方法吗?,c#,.net,wpf,C#,.net,Wpf,我已经创建了一个从Canvas派生的自定义类,其中包含将从visualcanvas派生的元素。画布还包含我通过创建线创建的网格 现在,为了缩放,我从画布上移除所有内容,调整画布的大小(放置在ScrollViewer中),并重新绘制画布上的所有内容。有没有更好的方法来实现缩放(提供的东西),它允许我滚动和缩放,并以某种方式创建一个视口,我可以移动和调整大小(用于滚动和缩放)?因为我担心很快会有复杂的形状、曲线和点出现在画布上,可能会有成千上万个,如果我使用我目前使用的方法,事情会变得非常缓慢 请告

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

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


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

从它的声音来看,似乎使用a可以让您执行所需的缩放,而无需重新绘制等等

发件人:


/>

如果您不想影响布局,那么我建议您使用
RenderTransform
而不是
layoututtransform
。比如说:

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

您可能还希望使用UIElement的
RenderTransferorMorigin
依赖属性,并且可以从代码隐藏处进行放大和缩小,更改
ScaleX
ScaleY
的值

顺便说一句,在做你想做的事情之前,你也希望阅读以下内容:

  • (佩佐尔德的博客)
<Canvas>
    <Canvas.RenderTransform>
        <ScaleTransform ScaleX="1" ScaleY="1"/>
    </Canvas.RenderTransform>
    <!--- other controls -->
</Canvas>