DynamicResource颜色不起作用

ast*_*ght 3 .net wpf styles dynamicresource

我有以下代码:

<Color x:Key="SelectedColor">Gold</Color> 
Run Code Online (Sandbox Code Playgroud)

以及包含颜色的TabItem样式

<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>
Run Code Online (Sandbox Code Playgroud)

事实证明我不能使用DynamicResource一个EasingColorKeyFrame.
我能做些什么来达到我的效果?

我需要动态设置颜色,所以才换"{DynamicResource SelectedColor}""{StaticResource SelectedColor}"是假表.

我已经创建了一个很小的解决方案来演示这个问题 - Selected Tab应该是Gold color,但它实际上是透明的,因为我猜VSM无法解析名为" SelectedColor" 的颜色

http://dl.dropbox.com/u/10557283/DynamicBug.zip

Roh*_*ats 6

动画(VSM)是freezable objects.只要在Freezable的依赖项属性上设置绑定,就可以防止Freezable被冻结.因此,绑定你的Value属性EasingColorKeyFrame objects are preventing the storyboards from being frozen.

作为一种出路,您可以尝试任何这三种方法,无论哪种方式最适合您 -

  • 尝试将资源声明为StaticResource并在VSM中使用它.VSM的StaticResource解释

  • 我从您的代码中理解的是您希望选择的tabItem为金色.因此,作为一种解决方法,你可以做的是让two borders面板中包含一个格子,一个格子一个,金色边框默认visibility为折叠,正常一个可见.现在,在selected event您的tabItem 上(在IsSelected或任何方法的属性更改上),您可以swap the visibility使用两个边框来产生相同的效果.当然,这种解决方法特定于这种情况,例如,只有当EasingColorKeyFrame键时间为0时才有意义,否则它不会产生相同的视觉效果.

  • 最后,如果你想坚持通过动画做到这一点,你可以实现这一目标code behind.这些职位可能被证明对你有所帮助- Woakaround为dynamicResource在动画,动画中后面的代码,并与VSM设置前景色