Silverlight - 管理颜色资源 - 错误

时间:2013-04-22 10:25:46

标签: silverlight templates styling

我正在尝试管理VS2012内置的Silverlight 5应用中的资源。出于主题的目的,我已经在我的各种自定义模板中提取了所有颜色代码,并将它们移动到单独的资源文件中,以便可以独立于主模板进行更改。

我已将它们声明如下:

<Color x:Name="ButtonForeground">#FFFFFF</Color>
<Color x:Name="ButtonBackground">#004760</Color>
<Color x:Name="ButtonAltBackground">#0089B7</Color>

虽然这构建并运行良好,但每当我构建项目时,这些行中的每一行都会出现两个“错误”:

  • 无法向“Color”类型的对象添加内容
  • TypeConverter处理初始化字符串'#ColorCode'时遇到的语法错误。通过TypeConverter创建的对象不允许使用元素属性。

定义了30种颜色后,我在错误列表窗口中有60个构建错误,即使项目构建并运行正常,这也会减少实际错误。

这也会导致无法启用我的颜色ResourceDictionary,因为他们无法找到带有Colors的主题文件,并且因为依赖于它们的词典不起作用,我是无法依次引用它们,因此我找不到任何模板。 (这导致另外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属性,注释掉的版本指向Border使用的Brush,并使用Color属性。注释掉的版本动画流畅,看起来很好,当前版本只需立即刷掉画笔。

由于

特里斯坦

1 个答案:

答案 0 :(得分:1)

您必须使用x:Key,而不是x:资源名称。 如果您具有x:Name属性但不具有x:Key,则会发生转换错误。

<Color x:Key="ButtonForeground">#FFFFFFFF</Color>

x:Key用于标识ResourceDictionary中的资源,而x:Name用于命名元素(网格,控件等)......