经典论坛's Archiver

ptxfp 发表于 2008-6-17 13:17

关于变换中心的问题

CenterX和CenterY应该可以定义变换的中心吧,但是我下面的代码把CenterX="0.5" CenterY="0.5" 改成CenterX="1"和CenterY="1",效果是一样的,似乎CenterX和CenterY没什么用???哪个好心人帮我看看吧,费不了几分钟的,谢了。。。
<Border Background="White" Height="130" Width="220" Canvas.Left="50" Canvas.Top="308">
            <Border.RenderTransform>
                <TransformGroup >
                <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
                <RotateTransform CenterX="0.5" CenterY="0.5" Angle ="45"/>
                </TransformGroup>
            </Border.RenderTransform>
</Border>

另外,我用RenderTransformOrigin="0.5,0.5"倒是可以,这两者有什么区别?:eek:

langmuir 发表于 2008-6-17 14:06

直接在XAML中修改CenterX和CenterY的值效果是一样的.
只是没有实时反映在设计界面.
你可以手动刷新一下设计界面,比如切换一下界面/放大缩小界面等.

ptxfp 发表于 2008-6-17 14:28

不是设计界面的问题

应该不是你说的这样,设计界面可能有不能实时反应的问题,但是我运行过的,和另一个CenterX="1",CenterY="1"的Border没有区别,不管怎样,谢谢回复呵呵。。。
[quote]原帖由 [i]langmuir[/i] 于 2008-6-17 14:06 发表 [url=http://bbs.blueidea.com/redirect.php?goto=findpost&pid=4064091&ptid=2864677][img]http://bbs.blueidea.com/images/common/back.gif[/img][/url]
直接在XAML中修改CenterX和CenterY的值效果是一样的.
只是没有实时反映在设计界面.
你可以手动刷新一下设计界面,比如切换一下界面/放大缩小界面等. [/quote]
其他人有知道怎么回事的吗?

langmuir 发表于 2008-6-17 14:35

RenderTransformOrigin不会TranslateTransform的外观产生任何影响.
看下面的代码,两者外观是一样的.
[code]<Rectangle RenderTransformOrigin="10, 0" Fill="#FFFF0404" Stroke="#FF000000" Width="96" Height="88" Canvas.Left="80" Canvas.Top="80" >
  <Rectangle.RenderTransform>
    <TranslateTransform X="50" Y="0" />
  </Rectangle.RenderTransform>
</Rectangle>

<Rectangle Fill="#FFFF0404" Stroke="#FF000000" Width="96" Height="88" Canvas.Left="80" Canvas.Top="80" >
  <Rectangle.RenderTransform>
    <TranslateTransform X="50" Y="0" />
  </Rectangle.RenderTransform>
</Rectangle>[/code]

[[i] 本帖最后由 langmuir 于 2008-6-17 15:22 编辑 [/i]]

ptxfp 发表于 2008-6-17 15:20

your answer is right,but not what I asked...

你说的对,“RenderTransformOrigin不会TranslateTransform的外观产生任何影响.”,不过我是想探讨下CenterX,CenterY和RenderTransformOrigin属性的区别,比如下面三个Border,中间的是正常的,左右两边分别通过设置CenterX,CenterY和设置RenderTransformOrigin想实现ScaleTransform沿着中心放大,但只有设置RenderTransformOrigin才能实现,设置CenterX和CenterY似乎无效,这就是我的困惑呵呵。。。

<Grid x:Name="LayoutRoot" Background="White">
<!--设置CenterX="0.5" CenterY="0.5"-->
            <Border HorizontalAlignment="Left" Margin="85,170,0,232" VerticalAlignment="Stretch" Width="105" Background="#FFECA1A1">
                <Border.RenderTransform>
                <TransformGroup >
                <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
                </TransformGroup>
        </Border.RenderTransform>
                </Border>
<!--参照的Border-->
                <Border HorizontalAlignment="Left" Margin="281,170,0,232" VerticalAlignment="Stretch" Width="105" Background="#FFECA1A1"/>
<!--设置RenderTransformOrigin="0.5,0.5"-->
            <Border HorizontalAlignment="Right" Margin="0,170,222,232" VerticalAlignment="Stretch" Background="#FFECA1A1" Width="105" RenderTransformOrigin="0.5,0.5">
                <Border.RenderTransform>
                <TransformGroup >
                <ScaleTransform ScaleX="1.5" ScaleY="1.5"/>               
                </TransformGroup>
        </Border.RenderTransform>
                </Border>
    </Grid>

[quote]原帖由 [i]langmuir[/i] 于 2008-6-17 14:35 发表 [url=http://bbs.blueidea.com/redirect.php?goto=findpost&pid=4064169&ptid=2864677][img]http://bbs.blueidea.com/images/common/back.gif[/img][/url]
RenderTransformOrigin不会TranslateTransform的外观产生任何影响.
看下面的代码,两者外观是一样的.

  
   
  



  
   
  


RenderTransformOriginsh设置的是一个原点值,提供TranslateTransform ... [/quote]

[[i] 本帖最后由 ptxfp 于 2008-6-17 15:21 编辑 [/i]]

langmuir 发表于 2008-6-17 16:08

RenderTransformOrigin就是用来声明呈现转换的中心点.是一个相对于对象的绝对坐标.
实现ScaleTransform沿着某一中心放大或缩小,需要设置的就是RenderTransformOrigin的坐标值.
如沿对象左上角变化,就需要设置为(0,0).沿中心变化,设置为(0.5,0.5).

CenterX和CenterY是用作定义对象相对于画布的位置,与呈现转换无关.

页: [1]



Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.