2

我正在尝试剪辑一个旋转的矩形,其方式与我可以剪辑一个缩放的矩形的方式类似。这是一些简单的代码:

<Canvas>
  <!--first example: clipping (transparent yellow) correctly clips scaled rectangle -->
  <Rectangle Fill="Red" Width="200" Height="200" Canvas.Left="20" Canvas.Top="20">
    <Rectangle.Clip>
      <RectangleGeometry Rect="0, 0, 200, 100">
        <RectangleGeometry.Transform>
          <ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
        </RectangleGeometry.Transform> 
      </RectangleGeometry>
    </Rectangle.Clip>
    <Rectangle.RenderTransform>
      <ScaleTransform ScaleX="2" ScaleY="2"/>
    </Rectangle.RenderTransform>
  </Rectangle>
  <Rectangle Width="200" Height="100" Canvas.Left="20" Canvas.Top="20">
    <Rectangle.Fill>
      <SolidColorBrush Color="Yellow" Opacity="0.5"/>
    </Rectangle.Fill>
  </Rectangle>
  <!--second example: clipping (transparent yellow) incorrectly clips rotated rectangle -->
  <Rectangle Fill="Red" Width="200" Height="200" Canvas.Left="20" Canvas.Top="250">
    <Rectangle.Clip>
      <RectangleGeometry Rect="0, 0, 200, 100">
        <RectangleGeometry.Transform>
          <RotateTransform CenterX="100" CenterY="100" Angle="0"/>
        </RectangleGeometry.Transform>
      </RectangleGeometry>
    </Rectangle.Clip>
    <Rectangle.RenderTransform>
      <RotateTransform CenterX="100" CenterY="100" Angle="45"/>
    </Rectangle.RenderTransform>   
  </Rectangle>
  <Rectangle Width="200" Height="100" Canvas.Left="20" Canvas.Top="250">
    <Rectangle.Fill>
      <SolidColorBrush Color="Yellow" Opacity="0.5"/>
    </Rectangle.Fill>
    <Rectangle.RenderTransform>
      <RotateTransform CenterX="100" CenterY="100" Angle="0"/>
    </Rectangle.RenderTransform>
  </Rectangle>
</Canvas>

在第一个示例中,我可以通过缩放(缩小)剪切区域来剪切缩放(扩展)的矩形。在第二个示例中,我想做类似的事情 - 通过以某种方式操纵红色矩形剪辑的 Transform 对象来保持由黄色矩形表示的剪辑区域。这应该不难,但我看不到。感谢您的任何建议。

4

1 回答 1

1

这个:

<Grid Background="Yellow" Canvas.Left="400" Canvas.Top="50" ClipToBounds="True" Width="200" Height="100">
    <Rectangle Fill="Red" Width="200" Height="200">
        <Rectangle.Clip>
            <RectangleGeometry Rect="0, 0, 200, 100">
                <RectangleGeometry.Transform>
                    <RotateTransform CenterX="100" CenterY="100" Angle="0"/>
                </RectangleGeometry.Transform>
            </RectangleGeometry>
        </Rectangle.Clip>
        <Rectangle.RenderTransform>
            <RotateTransform CenterX="100" CenterY="100" Angle="45"/>
        </Rectangle.RenderTransform>   
    </Rectangle>
</Grid>

会给你这个:

网格中的裁剪矩形

[红色矩形与您的示例相同,只是删除Canvas.Top/Canvas.Left设置器]

那是你要找的吗?

编辑:

抱歉,没有注意到 Silverlight 标记。

尝试这个:

<Grid Background="Yellow" Width="200" Height="100">
    <Grid.Clip>
        <RectangleGeometry Rect="0, 0, 200, 100"/>
    </Grid.Clip>
    <Rectangle Fill="Red" Width="200" Height="200">
        <Rectangle.Clip>
            <RectangleGeometry Rect="0, 0, 200, 100">
                <RectangleGeometry.Transform>
                    <RotateTransform CenterX="100" CenterY="100" Angle="0"/>
                </RectangleGeometry.Transform>
            </RectangleGeometry>
        </Rectangle.Clip>
        <Rectangle.RenderTransform>
            <RotateTransform CenterX="100" CenterY="100" Angle="45"/>
        </Rectangle.RenderTransform>   
    </Rectangle>
</Grid>

KaXaml 中的视觉结果相同。

于 2013-10-17T18:29:31.367 回答