代码之家  ›  专栏  ›  技术社区  ›  mattruma

如何使文本块在WPF中闪烁?

  •  16
  • mattruma  · 技术社区  · 14 年前

    我在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>
    

    1 回复  |  直到 12 年前
        1
  •  34
  •   Fredrik Hedblad    13 年前

    要使文本块在其文本更改时闪烁,可以使用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>
    

    这将使文本块在每次更改文本时闪烁。请注意,在使用BlinkAnimation之前,必须在文本块上显式设置背景和前景,否则将接收System.InvalidOperationException:“background”属性不指向路径“(0)。(1)”中的DependencyObject。

    更新

    要从后面的代码启动此动画,可以执行此操作。

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