.net - 动态资源颜色不起作用

标签 .net wpf styles dynamicresource

我有以下代码:

<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>

事实证明我不能使用 DynamicResourceEasingColorKeyFrame .
我该怎么做才能达到我的效果?

我需要动态设置颜色,所以只需交换 "{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
  • 我从您的代码中了解到,您希望选定的 tabItem 为金色。因此,作为一种解决方法,您可以使用 two borders包含在面板中说网格一个在另一个上,带有金色边框默认visibility作为折叠和正常的可见。
    现在,在 selected event (关于 IsSelected 或任何方法的属性更改)您的 tabItem 您可以 swap the visibility两个边界产生相同的效果。当然,这种变通方法是针对这种情况的,例如,仅当 EasingColorKeyFrame 关键时间为 0 时才有意义,否则不会产生相同的视觉效果。
  • 最后,如果你想坚持通过动画来做到这一点,你可以在 code behind 中实现。 .这些帖子可能对您有所帮助 - Woakaround for dynamicResource in Animation , Animation in code behindSetting foreground with VSM
  • 关于.net - 动态资源颜色不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195683/

    相关文章:

    c# - 从非托管进程卸载 .NET DLL

    c# - 模拟时使用 OpenFileDialog 访问映射的驱动器

    wpf - 如何摆脱xaml中的元素焦点边框

    android - 具有默认对话框主题的自定义 Activity 主题

    html - CSS - 样式不继承属性

    c# - 如何在 Windows 窗体应用程序中关闭多个窗体

    c# - GetAllNetworkInterfaces 需要一些垃圾

    c# - 如何使用 JavaScript 解密 AesCryptoServiceProvider?

    .net - WPF 中有内置的 IMultiValueConverter 吗?

    php - 如何在所有页面上使用 css 将 element.style 更改为无