, 그것은 다음과 같은 몇 가지 코드 생성이 코드에서
<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
메서드를 사용하는 동안 항상 원이 설정된 값을 반환합니다. 너무 많은 당신의 설명은 매우 명확하고 많은 도움이었다
var transform = (circle1.RenderTransform as CompositeTransform);
var x = Canvas.GetLeft(circle1) + transform.TranslateX;
var y = Canvas.GetTop(circle1) + transform.TranslateY;
감사 :
우리는 같은TranslateX
및TranslateY
으로 계산할 수의 "위치"를 얻으려면 –