1

我正在尝试管理我在 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 属性。注释掉的版本动画流畅且看起来不错,当前版本只是立即换掉画笔。

谢谢

特里斯坦

4

1 回答 1

1

对于资源,您必须使用 x:Key,而不是 x:Name。当您有 x:Name 属性但没有 x:Key 时,会发生转换错误。

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

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

于 2013-04-25T12:14:53.137 回答