Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight中的坐标变换问题_C#_.net_Animation_Silverlight_Visual Studio 2008 - Fatal编程技术网

C# Silverlight中的坐标变换问题

C# Silverlight中的坐标变换问题,c#,.net,animation,silverlight,visual-studio-2008,C#,.net,Animation,Silverlight,Visual Studio 2008,我正在使用Silverlight 3.0+.Net 3.5+VSTS 2008+C#开发基于ASP.Net的Silverlight应用程序。我对以下代码片段中的“TranslateTransform”和“RenderTransferMorigin”的功能感到非常困惑 顺便说一句:我大致理解RenderTransferMorigin的意思是将UI元素在x轴和y轴上移动一些偏移量,对吗?移动整个UI元素 <Grid Margin="-1,0,100,0" x:Name="con

我正在使用Silverlight 3.0+.Net 3.5+VSTS 2008+C#开发基于ASP.Net的Silverlight应用程序。我对以下代码片段中的“TranslateTransform”和“RenderTransferMorigin”的功能感到非常困惑

顺便说一句:我大致理解RenderTransferMorigin的意思是将UI元素在x轴和y轴上移动一些偏移量,对吗?移动整个UI元素

        <Grid Margin="-1,0,100,0" x:Name="controlsContainer" Height="35" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Bottom">
            <Grid.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform Y="0"/>
                </TransformGroup>
            </Grid.RenderTransform>
            <Rectangle Margin="0,0,0,0" Height="35" VerticalAlignment="Top" Fill="#97000000" Stroke="#00000000" RenderTransformOrigin="0.5,0.5"/>
            <VideoPlayer:mediaControl Height="35" Margin="1,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Top" x:Name="mediaControls" Visibility="Visible"/>
        </Grid>

RenderTransferMorigin与RotateTransform最相关-它确定旋转中心

TranslateTransform将在X/Y轴上将栅格移动一定数量的像素。在这种情况下,它不会做任何事情,因为Y是0,X是默认的0。
在这种情况下,我猜测一个动画或处于视觉状态的动画将修改TranslateTransform.Y,您看到的是初始值Y=0。

RenderTransform与RotateTransform最相关-它确定旋转中心

TranslateTransform将在X/Y轴上将栅格移动一定数量的像素。在这种情况下,它不会做任何事情,因为Y是0,X是默认的0。
在这种情况下,我猜测一个动画或处于视觉状态的动画将修改TranslateTransform.Y,您看到的是初始值Y=0。

您对
渲染传输Morigin
的理解不太正确

RenderTransformOrigin接受一个点,该点定义了应用RenderTransform(如RotateTransform)的原点或中心点

RenderTransferMorigin定义的点的有趣之处在于它不在绝对坐标中。这是什么意思?假设有一个大小为100 x 100像素的元素,如果你想围绕中心点应用变换,例如围绕中心旋转45度,你可以使用绝对坐标50,50,而是
0.5,0.5
,基本上表示元素的原点为0.5或一半,向下为0.5

虽然原点的典型值介于0和1之间,其中X轴中的0是元素的左侧,1是右侧,Y轴中的0是元素的顶部,1是元素的底部,但也可以将原点设置为元素外部的点。类似于
1.5、0.5
,它将在元素下方设置原点hlaf,并在元素右侧外侧设置元素宽度的一半

TranslateTransform,执行元素的平移或移动,如果您平移元素
45,60,这意味着将元素向右移动45个单位,向下移动60个单位

这里有几个例子,你可以玩,这可能有助于使我说的更清楚

    <!-- Rectangle rotated around the left top corner -->
    <Rectangle Width="100" Height="100" Fill="Red" RenderTransformOrigin="0,0">
        <Rectangle.RenderTransform>
            <RotateTransform Angle="45" />
        </Rectangle.RenderTransform>
    </Rectangle>

    <!-- Rectangle rotated around the center point -->
    <Rectangle Width="100" Height="100" Fill="Blue" RenderTransformOrigin="0.5,0.5">
        <Rectangle.RenderTransform>
            <RotateTransform Angle="45" />
        </Rectangle.RenderTransform>
    </Rectangle>

    <!-- Rectangle rotated around the bottom right corner -->
    <Rectangle Width="100" Height="100" Fill="Yellow" RenderTransformOrigin="1,1">
        <Rectangle.RenderTransform>
            <RotateTransform Angle="45" />
        </Rectangle.RenderTransform>
    </Rectangle>

    <!-- Rectangle translated 50 units to the right 70 units up, the origin does not matter here-->
    <Rectangle Width="100" Height="100" Fill="Green" RenderTransformOrigin="0,0">
        <Rectangle.RenderTransform>
            <TranslateTransform X="50" Y="-70" />
        </Rectangle.RenderTransform>
    </Rectangle>

您对
渲染传输Morigin
的理解不太正确

RenderTransformOrigin接受一个点,该点定义了应用RenderTransform(如RotateTransform)的原点或中心点

RenderTransferMorigin定义的点的有趣之处在于它不在绝对坐标中。这是什么意思?假设有一个大小为100 x 100像素的元素,如果你想围绕中心点应用变换,例如围绕中心旋转45度,你可以使用绝对坐标50,50,而是
0.5,0.5
,基本上表示元素的原点为0.5或一半,向下为0.5

虽然原点的典型值介于0和1之间,其中X轴中的0是元素的左侧,1是右侧,Y轴中的0是元素的顶部,1是元素的底部,但也可以将原点设置为元素外部的点。类似于
1.5、0.5
,它将在元素下方设置原点hlaf,并在元素右侧外侧设置元素宽度的一半

TranslateTransform,执行元素的平移或移动,如果您平移元素
45,60,这意味着将元素向右移动45个单位,向下移动60个单位

这里有几个例子,你可以玩,这可能有助于使我说的更清楚

    <!-- Rectangle rotated around the left top corner -->
    <Rectangle Width="100" Height="100" Fill="Red" RenderTransformOrigin="0,0">
        <Rectangle.RenderTransform>
            <RotateTransform Angle="45" />
        </Rectangle.RenderTransform>
    </Rectangle>

    <!-- Rectangle rotated around the center point -->
    <Rectangle Width="100" Height="100" Fill="Blue" RenderTransformOrigin="0.5,0.5">
        <Rectangle.RenderTransform>
            <RotateTransform Angle="45" />
        </Rectangle.RenderTransform>
    </Rectangle>

    <!-- Rectangle rotated around the bottom right corner -->
    <Rectangle Width="100" Height="100" Fill="Yellow" RenderTransformOrigin="1,1">
        <Rectangle.RenderTransform>
            <RotateTransform Angle="45" />
        </Rectangle.RenderTransform>
    </Rectangle>

    <!-- Rectangle translated 50 units to the right 70 units up, the origin does not matter here-->
    <Rectangle Width="100" Height="100" Fill="Green" RenderTransformOrigin="0,0">
        <Rectangle.RenderTransform>
            <TranslateTransform X="50" Y="-70" />
        </Rectangle.RenderTransform>
    </Rectangle>


谢谢!1.对于我的代码,element controlsContainer的RenderTransferMorigin值为(0.5,0.5),这是否意味着此元素将向右移动50%,向下移动50%?TranslateTransform Y=“0”在这里的作用是什么?2.对于矩形元素,RenderTransferMorigin具有值(0.5,0.5),这是否意味着此元素将向右移动50%,向下移动50%?@George2,否TranslateTransform不受RenderTransferMorigin的影响。请参阅我对上一个示例“此处的原点无关紧要”的评论@George2,是的,如果从当前示例中删除renderTransferorMorigin,则不会有任何区别。意思是在Y方向上移动0个单位,实际上这不会起任何作用。@George2,我认为这篇文章是错误的。我强烈建议您使用我提供的示例并亲自使用它,您将看到RenderTransferMorigin对TranslateTransform没有影响。现在,ScaleTransform(调整大小)是另一回事。这里有一个帖子,一位微软员工说:“有一件事是RenderTransferMorigin根本不会影响TranslateTransform。”@George2,没错,只是似乎不太清楚是什么