2012-04-18 4 views
6

랩 컨트롤 패널에 여러 개의 usercontrol을 생성하고 있습니다. 뷰 모델이 usercontrol에 바인딩되어 있고 뷰 모델의 속성으로 트리거 된 애니메이션이 있습니다. 깜박임을 시뮬레이트하기 위해 빨강에서 투명한 색으로 매우 간단하게 전환 할 수 있습니다.WPF에서 사용자 컨트롤간에 애니메이션을 동기화하는 방법

<Storyboard x:Key="alertAnimation" RepeatBehavior="Forever" AutoReverse="True" > 
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
            Storyboard.TargetName="TileBorder" 
            BeginTime="00:00:00" 
            RepeatBehavior="Forever" 
            AutoReverse="True" 
            > 
     <DiscreteColorKeyFrame Value="Red"/> 
     <DiscreteColorKeyFrame KeyTime="00:00:00.500" Value="Transparent" /> 
    </ColorAnimationUsingKeyFrames> 

</Storyboard> 

잘 작동합니다. 그러나 여러 사용자 컨트롤을 비동기 적으로로드하기 때문에 깜박이는 애니메이션은 동기화되지 않으므로 서로 다른 시간에 깜박입니다. 이제는 화면에서 깜박이는 것이 모두 같은 속도로 점멸해야한다는 요구 사항이 있습니다. 이 애니메이션을 동기화 할 수있는 방법이 있습니까? 내가 성취하고자하는 목표에 어울리는 예를 찾을 수없는 것 같습니다. ParallelTimeline을 사용하고, 모든 애니메이션을 추가하고, 단일 컨트롤러에서 시작/중지하는 방법이 있습니까? 어떤 예를 들어 이것을 어떻게 수행 할 수 있습니까?

EDIT 4/20 애니메이션을 style.xaml 파일에 정의하고 각 컨트롤이 "깜박임"애니메이션을 추가하고 기본 UI가 스토리 보드를 시작하게하는 "글로벌"스토리 보드를 가지고있는 것이 더 좋습니까?

+0

컨트롤 비동기를로드해야하는 이유가 무엇입니까? – Paparazzi

+0

외모가 정말 있습니다. 내가 그들을 동 기적으로로드 한 다음 응용 프로그램이 모든 컨트롤이로드 될 때까지 중단 된 것처럼 보였다. 또한 모든 초기 사용자 컨트롤이로드되면 다른 컨트롤이 온라인 상태가 될 때마다 언제든지 나타날 수 있습니다. 나는 그 사건도 해결할 필요가 있다고 생각했다. – mdutra

+0

간단한 애니메이션처럼 보이지만 키 프레임 위에 이산 해보겠습니다. – Paparazzi

답변

0

분명히 수정해야하지만 색 변환에서 0의 지속 시간을 사용하면 오버 헤드가 적게 깜박일 수 있습니다. 그리고 그렇지 않을 수도 있습니다. 시도 할만한 것.

<Rectangle Name="MyRectangle" Width="100" Height="100"> 
     <Rectangle.Fill> 
      <SolidColorBrush x:Name="MySolidColorBrush" Color="Blue" /> 
     </Rectangle.Fill> 
     <Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Rectangle.MouseEnter"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation 
      Storyboard.TargetName="MyRectangle" 
      Storyboard.TargetProperty="Width" 
      From="100" To="200" Duration="0:0:1" /> 

         <ColorAnimation 
      Storyboard.TargetName="MySolidColorBrush" 
      Storyboard.TargetProperty="Color" 
      From="Blue" To="Red" BeginTime="0:0:1" Duration="0:0:0" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Rectangle.Triggers> 
    </Rectangle> 
3

그래서 내가 UserControl을에서 애니메이션을 사용하는 대신 단순히 정적 객체의 DependencyProperty를 변경하는 애니메이션을 사용하지 결국 여러 된 UserControls에서 여러 애니메이션을 제어 할 수있는 좋은 방법을 찾아 모든 된 UserControls하지 수있는 저 재산에 어떤 유행 바인드에서 깜박 할 필요가있다. 원하는 결과를 얻는 데는 여러 가지 방법이 있지만 궁극적으로 모든 컨트롤에 깜박임이 켜졌을 때를 알 수있는 방법이있어서 모든 것이 동기화됩니다.

나는 다음 사이트에서 아이디어와 샘플 코드를 가지고 : How to synchronize animations across usercontrols in wpf

나는 그것에 몇 가지 수정을했지만 전반적으로 내가 그것을 할 필요가 정확히 무엇을했다.

+0

이것은 내가 지금 갈거야. 나는 애니메이션을 사용하기를 바랬다. 아 ~. –

관련 문제