在启动窗口中,定义了一个带有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不会出于任何原因工作。为什么?可能的错误?
答案 0 :(得分:1)
如果未设置该值,则抛出异常,您无法为默认前景设置动画,因为该实例是不可变的。 (如果你使用像这样的加载事件触发动画,它就会被吞下。)