我正在尝试管理我在 VS2012 中构建的 Silverlight 5 应用程序中的资源。出于主题的目的,我提取了各种自定义模板中的所有颜色代码,并将它们移动到单独的资源文件中,以便可以独立于主模板进行更改。
我已将它们声明如下:
<Color x:Name="ButtonForeground">#FFFFFF</Color>
<Color x:Name="ButtonBackground">#004760</Color>
<Color x:Name="ButtonAltBackground">#0089B7</Color>
虽然这可以正常构建和运行,但每当我构建项目时,这些行中的每一行都会出现两个“错误”:
- 无法向“颜色”类型的对象添加内容
- 处理初始化字符串“#ColorCode”时遇到 TypeConverter 语法错误。通过 TypeConverter 创建的对象不允许使用元素属性。
定义了 30 种颜色后,我在错误列表窗口中有 60 个构建错误,即使项目构建并运行良好,这会在出现真正的错误时减损。
这也产生了无法引用我的颜色 ResourceDictionary 的连锁反应,因为他们无法找到包含颜色的主题文件,并且由于依赖于它们的字典不起作用,我无法引用他们依次,所以没有找到我的模板。(这会导致另外 100 多个错误,这些错误不会停止应用程序的构建和运行)
谁能向我解释为什么会出现这些错误,以及我需要做些什么才能让它们消失?
更新:我也尝试过使用以下方法,它对 XAML 没有问题,并且就资源字典而言可以工作,但在运行时抛出异常:
<Color x:Name="ButtonForeground" R="255" G="255" B="255"><!--#FFFFFF--></Color>
<Color x:Name="ButtonBackground" R="0" G="71" B="96"><!--#004760--></Color>
<Color x:Name="ButtonAltBackground" R="0" G="137" B="183"><!--#0089B7--></Color>
这看起来与此处发布的错误有关:Silverlight XAML BUG
更新 2:我尝试了以下两种方法,两者都有效,但注释掉的版本会导致错误,因此我已将其删除。
<VisualState x:Name="Normal">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Background" Storyboard.TargetName="BtnBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonBackgroundBrush}"/>
</ObjectAnimationUsingKeyFrames>
<!--<ColorAnimation Duration="0:0:0.1" To="{StaticResource ButtonBackgroundColor}" Storyboard.TargetProperty="Color" Storyboard.TargetName="RbBorderBackground"/>-->
</Storyboard>
活动部分直接指向边框对象并使用它的 Brush 属性,注释掉的版本指向边框使用的 Brush,并使用 Color 属性。注释掉的版本动画流畅且看起来不错,当前版本只是立即换掉画笔。
谢谢
特里斯坦