2013-07-26 2 views
2

나는이보기 모델을 가지고있다. 애니메이션 엔진은 바인딩 스토리 보드를 고정 할 수 없기 때문에,애니메이션, Image.Source 및 바인딩

 <DataTemplate x:Key="MyTemplate"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 

       <CheckBox Content="Is flashing" IsChecked="{Binding IsFlashing}"/> 

       <Image x:Name="MyImage" Grid.Row="1" Source="{Binding Normal}"/> 
      </Grid> 

      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsFlashing}" Value="True"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MyImage" 
                   Storyboard.TargetProperty="Source" 
                   RepeatBehavior="Forever"> 
            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding Normal}"/> 
            <DiscreteObjectKeyFrame KeyTime="0:0:1" Value="{Binding Flash}"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 

이 작동하지 않습니다 입증하기 위해 , 나는 달성하기 위해 노력하고있어, 나는 XAML의 조각을 게시합니다. 다른 방법으로이 작업을 수행 할 수 있습니까?

뷰 모델에서 타이머를 사용하여이를 해결할 수 있지만이 방법은 냄새가 난다.

업데이트 Richard Deeming의 대답에 따르면 데이터 템플릿은이 방법으로 보입니다. 그것은 작동 타이머에 비해, 그것은 확실히 더 나은 :

 <DataTemplate x:Key="MyTemplate"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 

       <CheckBox Content="Is flashing" IsChecked="{Binding IsFlashing}"/> 

       <Image x:Name="NormalImage" Grid.Row="1" Source="{Binding Normal}"/> 
       <Image x:Name="FlashImage" Grid.Row="1" Source="{Binding Flash}" Visibility="Collapsed"/> 
      </Grid> 

      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsFlashing}" Value="True"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetName="NormalImage" 
                   Storyboard.TargetProperty="Visibility" 
                   RepeatBehavior="Forever" 
                   Duration="0:0:1"> 
            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/> 
            <DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{x:Static Visibility.Collapsed}"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
         <BeginStoryboard> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FlashImage" 
                   Storyboard.TargetProperty="Visibility" 
                   RepeatBehavior="Forever" 
                   Duration="0:0:1"> 
            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Collapsed}"/> 
            <DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{x:Static Visibility.Visible}"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
        <DataTrigger.ExitActions> 
         <BeginStoryboard> 
          <Storyboard FillBehavior="Stop"> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetName="NormalImage" 
                   Storyboard.TargetProperty="Visibility" 
                   Duration="0:0:1"> 
            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
         <BeginStoryboard> 
          <Storyboard FillBehavior="Stop"> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FlashImage" 
                   Storyboard.TargetProperty="Visibility" 
                   Duration="0:0:1"> 
            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Collapsed}"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.ExitActions> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 

답변

2

가장 간단한 솔루션은 두 개의 중복 이미지가 아마합니다 - Normal 소스에 바인딩 다른 하나는 Flash 소스에 바인딩을. 그런 다음 Storyboard을 사용하여 두 이미지의 Visibility 속성에 애니메이션을 적용 할 수 있습니다.

+0

좋은 아이디어. 시도해 볼게. – Dennis

관련 문제