仅当设置了颜色时,ColorAnimation才会启动

时间:2011-10-10 21:07:34

标签: wpf

在启动窗口中,定义了一个带有TextBlock的网格,如下所示:

<Grid>
    <TextBlock Text="stackoverflow.com"
               HorizontalAlignment="Center"
               VerticalAlignment="Center"
               Foreground="Yellow">
        <TextBlock.Triggers>
            <EventTrigger RoutedEvent="TextBlock.Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="200"
                                         Duration="0:0:5"
                                         Storyboard.TargetProperty="(TextBlock.FontSize)" />

                        <ColorAnimation To="Blue"
                                        Duration="0:0:5"
                                        Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </TextBlock.Triggers>
    </TextBlock>
</Grid>

在TextBlock中,定义了一个简单的DoubleAnimation和ColorAnimation,所以没什么了不起的。在VS中按F5后,动画直接启动。

删除Foreground="Yellow"后会出现奇怪的行为。默认情况下,TextBlock的前景设置为黑色(取决于首选系统主题)。现在两个动画应该开始,颜色应该从黑色变为蓝色。事实并非如此,动画将无法启动。此外,通过将ColorAnimation中的From属性设置为黑色,动画无法启动。

为什么会出现此行为,原因是什么?从我的角度来看,我无法看出是否设置颜色的合理原因。

编辑(附加信息)

如果设置了Foreground属性,则不会抛出异常。有趣的是,如果未设置Foreground属性,将选择默认颜色。您可以通过编写以下代码来简单地验证它:Debug.WriteLine(this.textBlock.Foreground.ToString());(另外添加的TextBlock的名称)。颜色由系统解决。此外,通过更改Windows主题,颜色得到解决。因此,颜色隐式设置为TextBlock。应该工作吧?

编写Foreground="Back"与当前选定的Windows主题不匹配。而不是这样做,我更喜欢动态资源如下

Foreground="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"

StaticResource工作正常,而DynamicResource不起作用,因此动画无法启动。

首先,WPF知道隐含的颜色。其次,DynamicResource不会出于任何原因工作。为什么?可能的错误?

1 个答案:

答案 0 :(得分:1)

如果未设置该值,则抛出异常,您无法为默认前景设置动画,因为该实例是不可变的。 (如果你使用像这样的加载事件触发动画,它就会被吞下。)