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,这确实会溢出。

对于您正在尝试的内容,您可以将其包装CanvasViewBox中。所以像:

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

现在应用相同的变换将“出现”以缩小Canvas尺寸以适应其在 parentGrid中。请注意,Viewbox它是子级的缩放比例,而不是调整它们的大小,所以这只是一种视觉效果。的Widthand仍将保持其在转换之前的原始状态HeightCanvas

于 2013-06-25T00:50:01.737 回答
0

您有ClipToBounds属性“裁剪” children 的内容:

正常行为:

在此处输入图像描述

启用 ClipToBounds:

在此处输入图像描述

此外,根据您的需要,您可能需要一个 RenderTransform 来代替:

在此处输入图像描述

(来自LayoutTransform 与 RenderTransform – 有什么区别?

于 2013-06-25T00:48:03.990 回答