【发布时间】:2011-12-04 20:16:03
【问题描述】:
在启动窗口中,定义了一个带有 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 的 Foreground 设置为黑色(取决于首选的系统主题)。现在两个动画都应该开始了,颜色应该从黑色变成蓝色。不是这样的,动画不会开始。此外,通过在 ColorAnimation 中将 From 属性设置为黑色,动画不会开始。
为什么会出现这种行为,原因是什么?从我的角度来看,无论是否设置颜色,我都看不出一个合乎逻辑的原因。
编辑(附加信息)
无论是否设置了 Foreground 属性,都不会引发异常。有趣的是,如果没有设置 Foreground 属性,则会选择默认颜色。您可以通过编写以下内容来简单地验证它:Debug.WriteLine(this.textBlock.Foreground.ToString());(另外添加了 TextBlock 的名称)。颜色由系统解析。同样通过更改 Windows 主题,颜色得到解决。因此,颜色被隐式设置为 TextBlock。应该是工作吧?
写入 Foreground="Back" 与当前选定的 Windows 主题不匹配。而不是这样做,我更喜欢 DynamicResource 如下
Foreground="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"
StaticResource 可以正常工作,而 DynamicResource 不能正常工作,因此动画无法启动。
首先,WPF 知道隐含颜色。其次,DynamicResource 不会因为任何原因起作用。为什么?可能的错误?
【问题讨论】:
标签: wpf