2014-01-18 1 views
0
<DataTemplate> 
    <StackPanel Name="stack" Background="PaleTurquoise"> 
     <Grid> 
      <Slider Name="sld" Value="{Binding TimeLeft}" /> 
     </Grid> 
    </StackPanel> 

    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding ElementName=sld, Path=Value}" Value="0"> 
      <DataTrigger.EnterActions> 
       <BeginStoryboard Name="flash"> 
        <Storyboard TargetName="stack" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"> 
         <ColorAnimation From="MediumSpringGreen" To="Crimson" Duration="0:0:0.1" AutoReverse="True" RepeatBehavior="0:0:5"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </DataTrigger.EnterActions> 
      <DataTrigger.ExitActions> 
       <RemoveStoryboard BeginStoryboardName="flash"/> 
      </DataTrigger.ExitActions> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

이것은 알람 응용 프로그램 내의 xaml의 축소 버전입니다. 슬라이더의 값이 0이되면, 슬라이더가 포함 된 StackPanel의 배경을 움직이는 ColorAnimation이 트리거됩니다.DataTrigger 내에서 ColorAnimation이 끝난 후에 이전 색으로 되돌리려면 어떻게해야합니까?

그러나 깜박임이 끝나면 배경색을 이전 값 (PaleTurquoise)으로 되돌리려합니다. xaml에서 어떻게이 작업을 수행합니까?

또 다른 질문으로, 초기화시 내 ViewModel의 TimeLeft가 0 임에도 불구하고 응용 프로그램이 처음로드 될 때 DataTrigger가 실행되지 않도록하려면 어떻게해야합니까? 결국

답변

0

나는 배경의 기본 색상에 대한 정적 리소스를 만든 따라서 첫 번째 후 또 다른 ColorAnimation을 넣어 :

<ColorAnimation To="{StaticResource alarmBackgroundColour}" BeginTime="0:0:5"/> 

시작시 실행되지에게 방아쇠를 얻기의 두 번째 부분에 대답하기 위해 나는 ValueConverter가 첫 번째 호출에 대해서만 1을 반환함으로써 해킹 당합니다.

더 나은 솔루션을 환영합니다.

관련 문제