2013-08-18 62 views
2

我有StatusBarTextBlock項目。這顯示正在採取的過程和狀態/信息消息。如果消息不是「準備就緒」,我希望隨着時間的推移,文本會消失,當「消失」時它會消失。動畫不表演本身

我目前正在測試這個,並且對於TextBlock有以下XAML。

<StatusBarItem DockPanel.Dock="Left" Margin="0,2,0,0"> 
    <TextBlock Text="{Binding StatusMessage}" 
       Margin="5,0,0,0" 
       Foreground="White"> 
     <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding SystemIsReady, 
              NotifyOnSourceUpdated=True, 
              Mode=TwoWay}" 
           Value="False"> 
         <DataTrigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetProperty="Opacity" 
                  From="1.0" 
                  To="0.5" 
                  Duration="0:0:1.5"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.EnterActions> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding SystemIsReady, 
              NotifyOnSourceUpdated=True, 
              Mode=TwoWay}" 
           Value="True"> 
         <Setter Property="Opacity" Value="1.0"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</StatusBarItem> 

的測試方法更改文本,如果狀態等於「就緒」狀態更新IsSytemReady。該綁定正在工作,但在顯示應用程序之前似乎已經啓動了淡入0.5不透明度的動畫,並且將此不透明度設置回1的觸發器也不起作用。

爲什麼動畫/觸發器不重新啓動?

謝謝你的時間。

回答

2

由於Timeline仍在運行,動畫不會重新啓動,因此您必須停止Storyboard以允許重置該值。

您可以使用StopStoryboard這一點,簡單地命名Storyboard然後調用StopStoryboard在真正DataTrigger

例的EnterActions

<TextBlock.Style> 
    <Style TargetType="{x:Type TextBlock}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding SystemIsReady, Mode=TwoWay, NotifyOnSourceUpdated=True}" Value="False"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Name="FadeOut"> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0.5" Duration="0:0:1.5"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding SystemIsReady, Mode=TwoWay, NotifyOnSourceUpdated=True}" Value="True"> 
       <Setter Property="Opacity" Value="1.0"/> 
       <DataTrigger.EnterActions> 
        <StopStoryboard BeginStoryboardName="FadeOut" /> 
       </DataTrigger.EnterActions> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</TextBlock.Style>