我正在尝试管理VS2012内置的Silverlight 5应用中的资源。出于主题的目的,我已经在我的各种自定义模板中提取了所有颜色代码,并将它们移动到单独的资源文件中,以便可以独立于主模板进行更改。
我已将它们声明如下:
<Color x:Name="ButtonForeground">#FFFFFF</Color>
<Color x:Name="ButtonBackground">#004760</Color>
<Color x:Name="ButtonAltBackground">#0089B7</Color>
虽然这构建并运行良好,但每当我构建项目时,这些行中的每一行都会出现两个“错误”:
定义了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属性。注释掉的版本动画流畅,看起来很好,当前版本只需立即刷掉画笔。
由于
特里斯坦
答案 0 :(得分:1)
您必须使用x:Key,而不是x:资源名称。 如果您具有x:Name属性但不具有x:Key,则会发生转换错误。
<Color x:Key="ButtonForeground">#FFFFFFFF</Color>
x:Key
用于标识ResourceDictionary中的资源,而x:Name
用于命名元素(网格,控件等)......