RotateTransform的CenterX和CenterY和元素的RenderTransformOrigin属性与

我们可以使用RotateTransform的CenterX和CenterY属性来定义元素的旋转中心,如下:

<Button.RenderTransform>
      
<RotateTransform CenterX="20" CenterY="20"></RotateTransform>
</Button.RenderTransform>

但是我们仍然可已使用元素的RenderTransformOrigin属性来表示变换中心。如下:

 

<Button x:Name="btnGenerate" Width="100" Height="35" Content="Generate XML" Click="btnGenerate_Click" RenderTransformOrigin="0.5,0.5">

 

那么,我们就会问了,既然元素已经有了一个RenderTransformOrigin属性了,为什么象RotateTransform这样的变换还有CenterX和CenterY呢?

首先,CenterX和CenterY属性确实与RenderTransformOrigin属性重复了,但是CenterX和CenterY使用像素来指定的,而不像RenderTransformOrigin使用的是规范化的值。因此,一个width为20的元素的右上角是有CenterX=0和CenterY=20来指定的。而不是(0,1).并且,当多个RenderTransform应用到同一个元素上时,RenderTransformOrigin会应用到所有这些RenderTransform上,然而独立变换的CenterX和CenterY属性更适合做精细的控制。

也就是说,RenderTransformOrigin通常比CenterX和CenterY更加有用。对于围绕元素中心转换一个元素的常用情况,相对的RenderTransformOrigin值(0.5,0.5)很容易在xaml中指定,然而用CenterX和CenterY实现同样的功能则需要对元素(如TextBlock)使用javascript,动态改变大小。

注意,能在使用某个元素的RenderTransformOrigin的同时使用它的变换的CenterX和CenterY。在这种情况下,两个X值个两个Y值要加在一起来计算出最终的原点。

posted @ 2009-04-23 11:25  Amanda2007  阅读(1498)  评论(1编辑  收藏  举报