使用storyboard Universal Windows App获取移动对象的位置

时间:2016-07-05 11:56:52

标签: c# storyboard uwp uwp-xaml blend-2015

我在画布上绘制了两个Circle对象。 我正在使用Blend for visual 2015创建的故事板 现在我想跟踪移动circle1的位置,看它何时到达circle2 试过这个:

  double x =  Canvas.GetLeft(circle1);

但是这会在移动圆圈之前获取值,并且不会跟踪其移动。

任何人都知道如何解决这个问题? 感谢

1 个答案:

答案 0 :(得分:1)

当我在Visual Studio 2015中使用Blend时,它会生成以下代码:

<Page ...>
    <Page.Resources>
        <Storyboard x:Name="Storyboard1" >
            <DoubleAnimation Duration="0:0:1" To="210" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
            <DoubleAnimation Duration="0:0:1" To="114" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
        </Storyboard>
    </Page.Resources>

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Canvas Width="600" Height="600">
            <Ellipse x:Name="ellipse" Fill="#FFF4F4F5" Height="100" Stroke="Black" Width="100" RenderTransformOrigin="0.5,0.5">
                <Ellipse.RenderTransform>
                    <CompositeTransform/>
                </Ellipse.RenderTransform>
            </Ellipse>
        </Canvas>
    </Grid>
</Page>

在此代码中,我们可以通过更改故事板中的RenderTransform,尤其是TranslateXTranslateY来实现此移动。所以圆圈的位置没有改变。使用Canvas.GetLeft方法时,它始终返回圆圈设置的值。

要获得&#34;位置&#34;,我们可以使用TranslateXTranslateY来计算:

var transform = (circle1.RenderTransform as CompositeTransform);
var x = Canvas.GetLeft(circle1) + transform.TranslateX;
var y = Canvas.GetTop(circle1) + transform.TranslateY;