2012-07-31 2 views
1

난 내가Storyboard.RepeatBehavior 비효율적

private void Repeat_Click(object sender, RoutedEventArgs e) 
{ 
    if (globalStoryboard.Children.Count != 0) 
    { 
    if (globalStoryboard.RepeatBehavior == RepeatBehavior.Forever) 
     globalStoryboard.RepeatBehavior = new RepeatBehavior(1.0); 
    else 
     globalStoryboard.RepeatBehavior = RepeatBehavior.Forever; 
    } 
} 

을 반복해야 사용하고 스토리 보드를 날씨를 전환하는 버튼을 추가하거나하지 않은 프로그램이하지만 전혀 작동하지 않습니다. 애니메이션이 첫 번째 재생의 끝에 도달하면 Completed 이벤트가 실행되고 (그렇게해서는 안됨) 애니메이션이 중지됩니다 (그 중 하나). 나는 아무 쓸데없는 몇 가지 다른 접근 방식을 시도하고 내 모든 검색은 그것이 고립 된 문제임을 나타내는 것 같습니다.

내가 뭘 잘못하고 있니?

다음은 스토리 보드에 애니메이션을 추가하는 장소 중 하나입니다. 이 부분을 잘게 잘라낸 Storyboard를 리턴 한 다음 GlobalStoryboard의 하위 항목을 만듭니다. 나는 이미 GlobalStoryboard를 함수에 전달하고 직접 애니메이션을 추가하여 중간 스토리 보드를 제거하려고했습니다. 문제를 해결하지 못했습니다.

double last = ((data[0] - min)/delta) * angle; 
for (double k = 1.001; k < data.Count; k++) 
{ 
    double val = ((data[(int)k] - min)/delta) * angle; 
    DoubleAnimation doubleAnimation = new DoubleAnimation(); 
    doubleAnimation.From = last; 
    doubleAnimation.To = val; 
    doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(1)); 
    doubleAnimation.BeginTime = TimeSpan.FromSeconds(k - 1); 
    s.Children.Add(doubleAnimation); 
    Storyboard.SetTargetName(doubleAnimation, "AxisRotation" + index); 
    Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("Angle")); 
    last = val; 
} 
+0

스토리 보드를 종료하지 않으시겠습니까? –

+1

Storyboard가 시작된 후에 고정되어 있기 때문입니다. 아마 당신은 그것을 대체해야합니다. – LPL

+0

사용자가 반복 동작을 토글 할 때마다 새로운 스토리 보드를 만드시겠습니까? Yikes, 내가 원하는 해결책이 아닙니다. – Kyjibo

답변

0

LPL이 정확했습니다. 스토리 보드가 애니메이션으로 작동 중일 때 간섭이 발생하지 않도록 고정되었습니다. 방금 반복 단추를 부울에 바인딩하고 완성 된 이벤트가 사실이라면 스토리 보드를 다시 재생했습니다.

관련 문제