代码之家  ›  专栏  ›  技术社区  ›  Tristan

Silverlight-管理颜色资源-错误

  •  1
  • Tristan  · 技术社区  · 12 年前

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

    谢谢

    特里斯坦

    1 回复  |  直到 8 年前
        1
  •  1
  •   Tonio    12 年前

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

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

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