1

LayoutTransform を使用して、キャンバスをうまく回転させることができます。ただし、コーナーはグリッドの幅または高さからはみ出します。キャンバスを回転およびサイズ変更して、グリッド内に保持するにはどうすればよいですか。これが私が回転している方法です:-

    private void btnRotate_Click(object sender, RoutedEventArgs e)
    {
        if (RotationAngle == 360)
        {
            RotationAngle = 0;
        }
        RotationAngle = RotationAngle + 1;

        RotateTransform rotateTransform = new RotateTransform();
        rotateTransform.Angle = RotationAngle;
        TransformGroup transformGroup = new TransformGroup();
        transformGroup.Children.Add(rotateTransform);
        rotateTransform.CenterX = 0.5;
        rotateTransform.CenterY = 0.5;
        cnvsYardMap.LayoutTransform = transformGroup;   
    }

ありがとう。

4

2 に答える 2

2

Gridがそのchild の新しいサイズに対応できない場合Canvas、境界をオーバーフローすることが予想されます。

あなたが次のようなものを持っている場合:

<Grid Height="200">
  <Canvas x:Name="blah"
          Width="280"
          Height="150"
          Background="Tomato" />
</Grid>

50deg を適用するとLayoutTransform、実際にオーバーフローします。

あなたがしようとしているのCanvasは、ViewBoxでラップすることができます。次のようなものです:

<Grid Height="200">
  <Viewbox>
    <Canvas x:Name="blah"
            Width="280"
            Height="150"
            Background="Tomato" />
  </Viewbox>
</Grid>

同じ変換を適用すると、親内に収まるようにサイズが縮小されて「表示」されます。サイズを変更するよりも子であることに注意してください。これは単なる視覚効果です。のとは、変換前の状態のままです。CanvasGridViewboxWidthHeightCanvas

于 2013-06-25T00:50:01.737 に答える
0

children のコンテンツを「クロップ」するClipToBoundsプロパティがあります。

通常の動作:

ここに画像の説明を入力

ClipToBounds を有効にした場合:

ここに画像の説明を入力

また、必要に応じて、代わりに RenderTransform が必要になる場合があります。

ここに画像の説明を入力

( LayoutTransform と RenderTransform の違い – What's the Difference?から)

于 2013-06-25T00:48:03.990 に答える