我在画布上绘制了两个Circle对象。 我正在使用Blend for visual 2015创建的故事板 现在我想跟踪移动circle1的位置,看它何时到达circle2 试过这个:
double x = Canvas.GetLeft(circle1);
但是这会在移动圆圈之前获取值,并且不会跟踪其移动。
任何人都知道如何解决这个问题? 感谢
答案 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
,尤其是TranslateX
和TranslateY
来实现此移动。所以圆圈的位置没有改变。使用Canvas.GetLeft
方法时,它始终返回圆圈设置的值。
要获得&#34;位置&#34;,我们可以使用TranslateX
和TranslateY
来计算:
var transform = (circle1.RenderTransform as CompositeTransform);
var x = Canvas.GetLeft(circle1) + transform.TranslateX;
var y = Canvas.GetTop(circle1) + transform.TranslateY;