이 Silverlight 애니메이션이 왜 전체 레이아웃을 사라지게합니까?
-
03-07-2019 - |
문제
나는 Silverlight를보기 시작했고 작게 시작하고 싶었습니다. 내가 사용한 모든 예제를 사용한 키 프레임 애니메이션을 보았으므로 다른 유형의 애니메이션을 시도하고 싶었습니다. 나는 또한 코드에서 애니메이션을 수행하는 데 다소 익숙하지 않았으므로 이것을 시도하기로 결정했습니다. 나의 궁극적 인 목표는 일종의 애니메이션 패널을 만드는 것이지만, 지금은 단 하나의 버튼으로 작게 시작합니다.
<UserControl x:Class="TestSilverlight.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300" Background="Azure">
<Grid x:Name="LayoutRoot" Background="Azure">
<Button x:Name="btnClick" Content="Animate me!" Height="48" Width="96" Click="btn_Click">
</Button>
</Grid>
</UserControl>
나는이 이벤트 핸들러를 썼다.
private void btn_Click(object sender, EventArgs e)
{
Storyboard story = new Storyboard();
story.RepeatBehavior = new RepeatBehavior(3.0);
story.Duration = new Duration(TimeSpan.FromSeconds(1.0));
if (btnClick.RenderTransform == null)
btnClick.RenderTransform = new TranslateTransform();
DoubleAnimation xAnim = new DoubleAnimation();
xAnim.To = 50;
Storyboard.SetTargetProperty(xAnim, new PropertyPath(TranslateTransform.XProperty));
Storyboard.SetTarget(xAnim, btnClick.RenderTransform);
story.Children.Add(xAnim);
story.Begin();
}
버튼을 클릭 할 때 기대하는 것은 오른쪽 50 단위로 3 번 미끄러짐을 보는 것입니다. 실제로 발생하는 것은 버튼과 함께 배경색에서 사라지는 것처럼 전체 레이아웃이 사라지는 것입니다.
RenderTransform으로 시작하기 위해 버튼의 코드를 다시 작성하면 모든 것이 작동합니다!
<Button x:Name="btnClick" Content="Animate me!" Height="48" Width="96" Click="btn_Click">
<Button.RenderTransform>
<TranslateTransform />
</Button.RenderTransform>
</Button>
실패를 일으키는 첫 번째 사례에서 무슨 일이 일어나고 있습니까? 나는 근본적으로 잘못된 일을하고 있습니까?
해결책
"btnclick.rendertransform == null"에 대한 검사를 제거하여 문제를 해결하고 항상 새로운 TransleTreTransform을 만들거나 "btnclick.rendertransform은 null 대신 TransleTetransform"을 확인하십시오.
이 오류를 보는 이유는 기본적으로 버튼이 렌더 트랜스 form에 대한 ID 변환이 있기 때문에 MatrixTransform이기 때문입니다. 따라서 MatrixTransform을 TransleTretransform 인 것처럼 애니메이션하려고 시도하고 있습니다.
다른 팁
내가 Silverlight와 함께 일한 마지막 시간은 2008 년 초에있었습니다. Silverlight의 베타 버전에서 때때로 전체 레이아웃이 사라졌습니다 (흰색과 비어 있음) 어느 오류 메시지 대신 오류가 발생했습니다.
이것이 현재 버전에서도 여전히 발생하는지 확실하지 않습니다. 예외가 발생했는지 확인하기 위해 코드를 통과 할 수 있습니까?
내가 당신을 조금 도울 수 있기를 바랍니다.
마티아스
나는 거의 똑같은 것을 조사해 왔으며, 내가 읽은 다양한 출처는 당신이 프로그래밍 방식으로 스토리 보드를 추가 할 수 없다고 제안합니다. XAML에 추가 해보면 코드에서 수정할 수 있습니다. XAML에도 변환을 추가해야 할 수도 있습니다. Silverlight는 WPF가 아니라는 것을 기억해야 할 사항은 가깝지만 많은 것들이 다릅니다. 고통이 될 정도로 충분합니다.
<UserControl x:Class="TestSilverlight.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300" Background="Azure">
<UserControl.Resources>
<StoryBoard Name="story" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="Azure">
<Button x:Name="btnClick" Content="Animate me!" Height="48" Width="96" Click="btn_Click">
</Button>
</Grid>