이 Silverlight 애니메이션이 왜 전체 레이아웃을 사라지게합니까?

StackOverflow https://stackoverflow.com/questions/619369

  •  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>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top