我有以下代码:
<Color x:Key="SelectedColor">Gold</Color>
和一个包含颜色的 TabItem Style
<VisualState x:Name="Selected">
<Storyboard>
<ColorAnimationUsingKeyFrames
Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)"
Storyboard.TargetName="InnerRectangle2">
<EasingColorKeyFrame KeyTime="0" Value="{DynamicResource SelectedColor}"/>
</ColorAnimationUsingKeyFrames>
事实证明我不能使用
DynamicResource
在 EasingColorKeyFrame
.我该怎么做才能达到我的效果?
我需要动态设置颜色,所以只需交换
"{DynamicResource SelectedColor}"
与 "{StaticResource SelectedColor}"
不在 table 上。我创建了一个小解决方案来演示该问题 - 选定选项卡应该是金色的,但它实际上是透明的,因为我猜 VSM 无法解析名为“
SelectedColor
”的颜色http://dl.dropbox.com/u/10557283/DynamicBug.zip
最佳答案
动画(VSM)是 freezable objects
.一旦对 Freezable 的依赖属性设置绑定(bind),就可以防止 Freezable 被卡住。因此,您的 EasingColorKeyFrame objects are preventing the storyboards from being frozen.
的 Value 属性上的绑定(bind)
作为一条出路,您可以尝试这三种方法中最适合您的方法 -
StaticResource
并在您的 VSM 中使用它。 StaticResource explanation for VSM two borders
包含在面板中说网格一个在另一个上,带有金色边框默认visibility
作为折叠和正常的可见。现在,在
selected event
(关于 IsSelected 或任何方法的属性更改)您的 tabItem 您可以 swap the visibility
两个边界产生相同的效果。当然,这种变通方法是针对这种情况的,例如,仅当 EasingColorKeyFrame 关键时间为 0 时才有意义,否则不会产生相同的视觉效果。 code behind
中实现。 .这些帖子可能对您有所帮助 - Woakaround for dynamicResource in Animation , Animation in code behind和 Setting foreground with VSM 关于.net - 动态资源颜色不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195683/