1

数千のポリゴンを追加したキャンバスがあります。

ズームインできるようにしたいと思います(これは ScaleTransform.

ただし、キャンバスの一部のみを描画するために Canvas.Clip も使用しようとしましたが、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 (他のすべての変換と同様) は、他のすべてのレンダリングの後に適用されます。つまり、最初に cliprect が適用され、次にスケール変換が適用されます。解決策は、このキャンバスの周りに別のキャンバスを配置して、クリッピングを 1 レベル高くすることです。

于 2011-01-26T08:48:31.267 に答える
1

キャンバスの周りに境界線を置き、クリップ領域をキャンバスではなく境界線に取り付けます。

于 2009-09-08T10:16:44.863 に答える