【问题标题】:Canvas zoom in and zoom out, is there a better way to implement it?画布放大缩小,有没有更好的实现方式?
【发布时间】:2011-11-22 18:09:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    如果您不想影响布局,那么我建议您使用RenderTransform 而不是LayoutTransform。所以是这样的:

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

    您可能还想使用 UIElement 的 RenderTransformOrigin 依赖属性,并且可以通过更改 ScaleXScaleY 的值的代码进行放大和缩小。

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

    【讨论】:

      【解决方案2】:

      从它的声音看来,使用 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>
      

      【讨论】:

        猜你喜欢
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多