是否可以同时对多个文本块的颜色更改进行动画处理?

时间:2011-08-15 13:43:52

标签: wpf silverlight xaml windows-phone-7 animation

我使用的是Windows Phone 7应用,该页面上有一个页面和一个StackPanel。

StackPanel包含几个TextBlock元素。

我需要以相同的方式为所有TextBlock元素的颜色设置动画。

不幸的是,当我设置ColorAnimationUsingKeyFrames时,我只能指定一个TargetName。由于有多个TextBlock控件需要以相同的方式进行动画处理,这非常不方便,我怀疑必须有一种更好的方法来处理粘贴n个ColorAnimation定义的复制,每个文本块都有一个动画。

如何设置颜色动画以同时应用于多个控件?

编辑:我意识到这是一个WP7问题,但我已将其标记为WPF,因为我相信同样的技术适用于两者,但如果我错了,请随时纠正我。

3 个答案:

答案 0 :(得分:2)

您应该能够在单个元素的属性上定位动画,然后使用ElementName绑定来同步TextBlocks之间的值。或者示例:

<TextBlock x:Name="textOne" Text="One"/>
<TextBlock x:Name="textTwo" Text="Two"
           Background="{Binding Background, ElementName=textOne}"/>

在上面的XAML中,一个TextBlock的背景与另一个绑定。如果您的故事板以“textOne”为目标,那么另一个TextBlock也会设置动画。

答案 1 :(得分:1)

我会尝试对称地做这个,外化画笔并在所有相应的地方使用它,如下所示:

<StackPanel.Resources>
    <SolidColorBrush x:Key="TBBackground" Color="White"/>
    <Style TargetType="TextBlock">
        <Setter Property="Background" Value="{StaticResource TBBackground}"/>
    </Style>
<StackPanel.Resources>
    <!- ... -->
    <Storyboard>
         <ColorAnimation Storyboard.Target="{StaticResource TBBackground}"
                         Storyboard.TargetProperty="Color"
                         To="Red"/>
    </Storyboard>

编辑:对它进行了测试并且存在一些不可变性的问题,否则可能需要在Silverlight中包装颜色,可能会遇到麻烦。

答案 2 :(得分:0)

使用故事板更改文本块。您可以使用storyboaed为文本块设置样式,然后在需要时执行故事板。