1

我有一个画布,其中添加了数千个多边形。

我希望能够放大(我正在通过 ScaleTransform.

但是,我也一直在尝试使用 Canvas.Clip 来仅绘制 Canvas 的一部分,但是一旦更改 ScaleTransform 值,剪辑就会停止工作...

    <Canvas Grid.Row="1" Margin="10" x:Name="cnvMain" Background="Transparent" >
        <Canvas.Clip>
            <RectangleGeometry x:Name="CanvasClip"  Rect="0, 0, 300, 300"/>
        </Canvas.Clip>
        <Canvas.RenderTransform>
            <ScaleTransform x:Name="CanvasScaleTransform" ScaleX="1" ScaleY="1"></ScaleTransform>
        </Canvas.RenderTransform>
     </Canvas>

在我的代码隐藏中,

    private void slScale_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        CanvasScaleTransform.ScaleX = slScale.Value;
        CanvasScaleTransform.ScaleY = slScale.Value;
    }

我在做任何明显错误的事情吗?

4

2 回答 2

2

ScaleTransform(与所有其他转换一样)在其他所有渲染之后应用。这意味着,首先应用剪辑矩形,然后应用缩放变换。一种解决方案是通过在此画布周围放置另一幅画布,将剪裁提高一层。

于 2011-01-26T08:48:31.267 回答
1

在画布周围放置一个边框,并将剪辑区域附加到边框而不是画布上。

于 2009-09-08T10:16:44.863 回答