<Grid >
    <Grid HorizontalAlignment="Left" Height="104" Margin="100,257,0,0" VerticalAlignment="Top" Width="714">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition />
            <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>
        <Border Background="Black" Width="200" />
        <Border Grid.Column="1" Background="Red"/>
            <Border Grid.Column="2" Background="Black" Width="200" RenderTransformOrigin="0.5,0.5"/>
        </Grid>       
</Grid>
上面在Grid的三列中各放了一个Border,然后在Blend中,对第三个Border使用LayoutTransform属性应用变换,而不是使用RenderTransform属性。如下所示:
<Grid >
    <Grid HorizontalAlignment="Left" Height="104" Margin="100,257,0,0" VerticalAlignment="Top" Width="714">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition />
            <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>
        <Border Background="Black" Width="200" />
        <Border Grid.Column="1" Background="Red"/>
        <Border Grid.Column="2" Background="Black" Width="200" RenderTransformOrigin="0.5,0.5">
            <Border.LayoutTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform Angle="30"/>
                    <TranslateTransform/>
                </TransformGroup>
            </Border.LayoutTransform>
        </Border>
    </Grid>       
</Grid>
我想问的是,虽然LayoutTransform会是元素在变换之后,重新计算布局,但是,此例中,为什么Border旋转一点点后,就看不到了呢?

解决方案 »

  1.   

    给第三个border设置一个定高就好了 试试
      

  2.   

    不是看不到了,是因为你的border高度为0.你可以给你的border加一个边框,就能看出来为什么了,orderBrush="Brown" BorderThickness="2".什么原因导致的,RenderTransform and LayoutTransform起作用的时间点不同。
    简单的说,RenderTransform起作用的时候,你的border的高度由于自动填充了第三列,所以真实高度已经有了。
    而LayoutTransform起作用的时候,你的border并没有自动填充第三列,由于你只设置了border的宽度,所以这里高度就是0了。所以你什么都看不到了。