2012-10-17 1 views
1

매우 구체적인 사용 사례가 있으며이를 구현하는 데 이상한 문제가 있습니다. 내 Metro 앱에는 사용자 상호 작용으로 이동하고 싶은 몇 가지 이미지가 있습니다. 마치 체스 조각의 이미지를 예로 들어 보겠습니다. 이후 포인터 이동을 따라 애니메이션을 만들 수 없으므로 스토리 보드 애니메이션을 사용하여 작업을 완료합니다.Metro 앱의 스토리 보드 애니메이션 및 첨부 된 속성

그래서 제가 본질적으로 가지고있는 것은 게임 보드 전체에 대한 캔버스와 하단 코너에 작은 체스 조각 이미지입니다. 체스 조각의 Top과 Left 속성을 수동으로 설정할 수 있으므로 초기 설정이 간단합니다. 체스 조각을 이동하려면 이동에 따라 새로운 Top 및 Left 속성을 계산합니다. 예를 들어 플레이어가 폰을 위로 움직이면 Top의 값은 (Canvas.Height/8)만큼 변경되지만 Left 속성은 그대로 유지됩니다. 자, 여기까지, 모든 것이 잘됩니다. 문제는 매끄러운 움직임 대신 이미지가 초기 위치에서 최종 위치로 점프하게됩니다.

그래서 아래에서와 같이 왼쪽 위와 왼쪽 위를 움직이게하는 스토리 보드를 만들었습니다.

<Storyboard x:Key="storyboard"> 
    <DoubleAnimation x:Name="playerLeftAnimation" Storyboard.TargetName="playerPiece" 
        Storyboard.TargetProperty="Canvas.Left" 
        EnableDependentAnimation="True"  
        Duration="0:0:2" /> 
    <DoubleAnimation x:Name="playerTopAnimation" Storyboard.TargetName="playerPiece" 
        Storyboard.TargetProperty="Canvas.Top" 
        EnableDependentAnimation="True"  
        Duration="0:0:2" /> 
</Storyboard> 

이 방법을 Fontsize와 같은 일반적인 종속성 속성에 사용하면 잘 작동합니다. 여기서 playerPiece는 이미지 이름입니다. Canvas의 이름이 지정되지 않았습니다. 하지만 여기에서는 "스토리 보드의 대상 속성을 해결할 수 없습니다"라는 예외가 있습니다. 나는 놓을 것이 무엇인지 놓치고 있습니까? 아니면 이미지의 위치를 ​​움직이게 다른 방법을 시도해야합니까? 그렇다면 어떤 아이디어가 가장 좋은 방법일까요?

답변

2

MSDN 덕분에 해결되었습니다. "Canvas.Left"대신 targetproperty를 "(Canvas.Left)"로 언급하면됩니다.