使用 storyboard Universal Windows App 获取移动对象的位置
Get the position of an object moving using storyboard Universal Windows App
我在 canvas 上绘制了两个 Circle 对象。
我正在移动一个在 Blend 中为 visual 2015 创建的故事板
现在我想跟踪移动的 circle1 的位置以查看它何时到达 circle2
试过这个:
double x = Canvas.GetLeft(circle1);
但这会获取圆移动之前的值并且不会跟踪其移动。
有人知道如何解决这个问题吗?
谢谢
当我在 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
,特别是storyboard中的TranslateX
和TranslateY
来实现的。所以圆圈的位置没有改变。在使用 Canvas.GetLeft
方法时,它总是 returns 设置圆的值。
为了得到"position",我们可以用TranslateX
和TranslateY
来计算,比如:
var transform = (circle1.RenderTransform as CompositeTransform);
var x = Canvas.GetLeft(circle1) + transform.TranslateX;
var y = Canvas.GetTop(circle1) + transform.TranslateY;
我在 canvas 上绘制了两个 Circle 对象。 我正在移动一个在 Blend 中为 visual 2015 创建的故事板 现在我想跟踪移动的 circle1 的位置以查看它何时到达 circle2 试过这个:
double x = Canvas.GetLeft(circle1);
但这会获取圆移动之前的值并且不会跟踪其移动。
有人知道如何解决这个问题吗? 谢谢
当我在 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
,特别是storyboard中的TranslateX
和TranslateY
来实现的。所以圆圈的位置没有改变。在使用 Canvas.GetLeft
方法时,它总是 returns 设置圆的值。
为了得到"position",我们可以用TranslateX
和TranslateY
来计算,比如:
var transform = (circle1.RenderTransform as CompositeTransform);
var x = Canvas.GetLeft(circle1) + transform.TranslateX;
var y = Canvas.GetTop(circle1) + transform.TranslateY;