2011-03-15 9 views
2

이것은 생각할 필요가없는 것처럼 보이지만 WPF 스토리 보드를 일시 중지 할 수 없습니다. 나는 Pause를 호출하고 아무 일도 일어나지 않는다.스토리 보드를 일시 중지하려면 어떻게해야합니까?

여기에는 재현 케이스가 있습니다. 폭을 애니메이션하는 버튼입니다. 버튼을 클릭하면 스토리 보드에서 일시 중지가 호출됩니다. 버튼을 클릭하자마자 너비가 변하지 않을 것으로 예상됩니다. 대신에 폭을 멈추지 않은 것처럼 애니메이트하는 데에 너비가 그대로 유지됩니다.

나는 문서의 이해 것과
NameScope.SetNameScope(this, new NameScope()); 
var storyboard = new Storyboard(); 

var button = new Button { Content = "Pause", Name = "pause" }; 
this.Content = button; 
RegisterName(button.Name, button); 
var animation = new DoubleAnimation(0, 200, TimeSpan.FromSeconds(5)); 
Storyboard.SetTargetName(animation, button.Name); 
Storyboard.SetTargetProperty(animation, 
    new PropertyPath(FrameworkElement.WidthProperty)); 
storyboard.Children.Add(animation); 

button.Click += (sender, e) => { storyboard.Pause(this); }; 
storyboard.Begin(this); 

, 나는 따라서 Pause(this) 위, 내가 Begin에 전달 된 같은 매개 변수를 사용하여 Pause(FrameworkElement) 오버로드를 호출해야합니다. 그러나 나는 또한 동작을 변경하지 않고 storyboard.Pause()을 시도했습니다. 나는 또한 아무 효과없이 다시 그것의 지옥을 위해 storyboard.Pause(button)을 시도했다. 가능성을 피하기 위해 storyboard.Pause(storyboard)storyboard.Pause(animation)을 시도했지만 어느 것도 컴파일하지 않았습니다. FrameworkElement (또는 FrameworkContentElement)가 필요합니다.

어떻게 스토리 Boad를 일시 중지 하시겠습니까?

답변

4

난 당신이 weired SetNameScope 등 내가이 일을 만들 수있는 코드를 지우기 것을 사용하는 이유를 알고하지 않습니다

 //NameScope.SetNameScope(this, new NameScope()); 
     var storyboard = new Storyboard(); 

     var button = new Button { Content = "Pause", Name = "pause" }; 
     this.Content = button; 
     //RegisterName(button.Name, button); 
     var animation = new DoubleAnimation(0, 200, TimeSpan.FromSeconds(5)); 
     Storyboard.SetTarget(animation, button); 
     Storyboard.SetTargetProperty(animation, 
      new PropertyPath(FrameworkElement.WidthProperty)); 
     storyboard.Children.Add(animation); 

     button.Click += (sender, e) => { storyboard.Pause(); }; 
     storyboard.Begin(); 
+0

허. MSDN 문서에서는 이름 범위를 설정해야한다고 주장하지만 버전은 (a) 더 간단하고 (b) 작동합니다. 내가 할게요. –

+0

나는 약간 당황 스럽다. 나는 5 년 동안 WPF를 프로그래밍 해왔다. NameScope와 RegisterName의 사용법을 처음 보았다. -/ –

+0

매직 코드 변경은 (a) SetTargetName 대신 SetTarget을 사용하고 (b) 'this'를 전달하는 대신 매개 변수없는'Begin'과'Pause'를 사용하는 것입니다. NameScope은 무해하지만 SetTarget을 사용할 때는 불필요합니다. –

관련 문제