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