我正在尝试管理在VS2012中构建的Silverlight 5应用程序中的资源。为了主题化的目的,我提取了各种自定义模板中的所有颜色代码,并将它们移动到一个单独的资源文件中,这样它们就可以独立于主模板进行更改。
我声明如下:
<Color x:Name="ButtonForeground">#FFFFFF</Color>
<Color x:Name="ButtonBackground">#004760</Color>
<Color x:Name="ButtonAltBackground">#0089B7</Color>
虽然这会构建并运行良好,但每当我构建项目时,这些行中的每一行都会出现两个“错误”:
-
无法将内容添加到“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属性。注释掉的版本动画效果流畅,看起来不错,当前版本只是立即交换笔刷。
谢谢
特里斯坦