C#/WPF에서 애니메이션을 중지하는 방법은 무엇입니까?

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

  •  09-06-2019
  •  | 
  •  

문제

나는 다음과 같은 것을 가지고 있습니다 :

barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation(
    barProgress.Value, dNextProgressValue,
    new Duration(TimeSpan.FromSeconds(dDuration)));

이제 해당 애니메이션을 어떻게 중지하시겠습니까( DoubleAnimation)?내가 이 작업을 하고 싶은 이유는 새 애니메이션을 시작하고(작동하는 것처럼 보이지만 말하기 어렵습니다) 결국 마지막 애니메이션을 중지하고 싶기 때문입니다...

도움이 되었습니까?

해결책

중지하려면 전화하세요. BeginAnimation 다시 두 번째 인수를 다음으로 설정합니다. null.

다른 팁

스토리보드를 사용하여 애니메이션을 제어할 때 애니메이션을 제어 가능하게 설정하려면 두 번째 매개변수를 true로 설정해야 합니다.

public void Begin(
    FrameworkContentElement containingObject,
    **bool isControllable**
)

BeginAnimation을 중지하는 방법에는 두 가지가 있습니다.첫 번째는 두 번째 매개변수를 null로 설정하여 BeginAnimation을 다시 호출하는 것입니다.그러면 해당 속성의 모든 애니메이션이 제거되고 돌아가는 것 값을 기본 값으로 되돌립니다.

해당 값을 어떻게 사용하는지에 따라 이는 원하는 동작이 아닐 수도 있습니다.두 번째 방법은 애니메이션 BeginTime을 null로 설정한 다음 이를 사용하여 BeginAnimation을 호출하는 것입니다.그러면 특정 애니메이션이 제거되고 값은 현재 위치에 그대로 유지됩니다.

DoubleAnimation myAnimation = new Animation();
// Initialize animation
...

// To start
element.BeginAnimation(Property, myAnimation);

// To stop and keep the current value of the animated property
myAnimation.BeginTime = null;
element.BeginAnimation(Property, myAnimation);

기본 값이 다시 유효 값이되기를 원한다면 애니메이션이 속성에 영향을 미치는 것을 중지해야합니다.스토리 보드 애니메이션 으로이 작업을 수행하는 세 가지 방법이 있습니다.

  • 애니메이션의 FillBehavior 속성을 중지하도록 설정하십시오
  • 전체 스토리보드 제거
  • 개별 속성에서 애니메이션을 제거하십시오

MSDN에서

어떻게:스토리보드를 사용하여 애니메이션을 적용한 후 속성 설정

내 경우에는 두 가지 명령을 사용해야 했습니다. xaml에는 트리거를 실행하는 버튼이 있고 해당 트리거는 스토리보드 애니메이션을 실행합니다.

다음 코드를 사용하여 애니메이션을 중지하는 버튼을 추가했습니다.

MyBeginStoryboard.Storyboard.Begin(this, true);
MyBeginStoryboard.Storyboard.Stop(this);

마음에 들지 않지만 여기서는 정말 효과가 있어요.시도 해봐!

<Trigger.EnterActions>
       <BeginStoryboard x:Name="myStory">
       .........
       </BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
       <StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>

StoryBoard에 애니메이션을 배치합니다.스토리보드에서 Begin() 및 Stop()을 호출하여 애니메이션 중지를 시작합니다.

다음 코드를 사용할 수 있습니다.

[StoryBoardName].Remove([StoryBoardOwnerControl]);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top