2010-11-14 80 views
16

我正在用一堆關鍵性能指標在WPF中創建一個儀表板,每個關鍵性能指標都由三個值組成。如何使wpf中的文本塊閃爍?

alt text

每當值改變我希望用戶控制閃爍5秒。我想使控件的背景顏色切換文本塊的前景顏色,並將文本塊前景顏色切換爲用戶控件的背景顏色。

這整個WPF動畫對我來說是新的,所以任何幫助將不勝感激!

我的用戶控件的樣子:

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="10" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="10" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <TextBlock x:Name="TitleTextBlock" Text="Title" FontSize="32" HorizontalAlignment="Center" Grid.Row="0" FontFamily="OCR-A II" Foreground="White" VerticalAlignment="Bottom" /> 
    <TextBlock x:Name="Value1TextBlock" Text="0" FontSize="192" HorizontalAlignment="Center" Grid.Row="2" FontFamily="OCR-A II" VerticalAlignment="Center" Foreground="White" /> 
    <TextBlock x:Name="Value2TextBlock" Text="0" FontSize="32" HorizontalAlignment="Center" Grid.Row="4" FontFamily="OCR-A II" Foreground="White" VerticalAlignment="Top" /> 

</Grid> 

回答

33

爲了使一個TextBlock眨眼時,其文字更改,你可以使用ColorAnimationUsingKeyFrames。文本綁定到名爲TextTitle的屬性。

<Window.Resources> 
    <Storyboard x:Key="blinkAnimation" Duration="0:0:5" > 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" 
             Storyboard.TargetName="TitleTextBlock" 
             AutoReverse="True"> 
      <ColorAnimationUsingKeyFrames.KeyFrames> 
       <DiscreteColorKeyFrame KeyTime="0:0:0" Value="White"/> 
       <DiscreteColorKeyFrame KeyTime="0:0:1" Value="Black"/> 
       <DiscreteColorKeyFrame KeyTime="0:0:2" Value="White"/> 
       <DiscreteColorKeyFrame KeyTime="0:0:3" Value="Black"/> 
       <DiscreteColorKeyFrame KeyTime="0:0:4" Value="White"/> 
      </ColorAnimationUsingKeyFrames.KeyFrames> 
     </ColorAnimationUsingKeyFrames> 

     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" 
             Storyboard.TargetName="TitleTextBlock" 
             AutoReverse="True"> 
      <ColorAnimationUsingKeyFrames.KeyFrames> 
       <DiscreteColorKeyFrame KeyTime="0:0:0" Value="Black"/> 
       <DiscreteColorKeyFrame KeyTime="0:0:1" Value="White"/> 
       <DiscreteColorKeyFrame KeyTime="0:0:2" Value="Black"/> 
       <DiscreteColorKeyFrame KeyTime="0:0:3" Value="White"/> 
       <DiscreteColorKeyFrame KeyTime="0:0:4" Value="Black"/> 
      </ColorAnimationUsingKeyFrames.KeyFrames> 
     </ColorAnimationUsingKeyFrames> 
    </Storyboard> 
</Window.Resources> 

<Grid Name="grid" Background="Black"> 
    <TextBlock x:Name="TitleTextBlock" Text="{Binding TextTitle, NotifyOnTargetUpdated=True}" FontSize="32" HorizontalAlignment="Center" Grid.Row="0" FontFamily="OCR-A II" Foreground="White" VerticalAlignment="Bottom" Background="Black"> 
     <TextBlock.Triggers> 
      <EventTrigger RoutedEvent="Binding.TargetUpdated"> 
       <EventTrigger.Actions> 
        <BeginStoryboard> 
         <StaticResource ResourceKey="blinkAnimation"/> 
        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
     </TextBlock.Triggers>  
    </TextBlock> 
</Grid> 

這將使TextBlock在每次文本更改時閃爍。請注意,在使用blinkAnimation之前,您必須在TextBlock上明確設置Background和Foreground,否則您將收到System.InvalidOperationException:'Background'屬性不指向路徑'(0)。(1)'中的DependencyObject。

更新

從代碼中啓動該動畫的背後,你可以做到這一點。

Storyboard blinkAnimation = TryFindResource("blinkAnimation") as Storyboard; 
if (blinkAnimation != null) 
{ 
    blinkAnimation.Begin(); 
} 
+0

比方說,我想調用動畫讓它閃爍......我該怎麼做? – mattruma 2010-11-15 02:00:44

+0

假設我爲多個TextBlocks使用相同的故事板。如果我叫'blinkAnimation.Begin();'不會全部閃爍?如果我想讓特定的TextBlock閃爍怎麼辦? – epalm 2017-10-30 14:44:01