WPF动态资源:警告信息 - “无法解析资源'resource'。”

12

我有一个使用DynamicResources的UserControl。应用程序使用该资源编译并运行得很好,但看到这个警告信息还是有些烦人。这让我想知道我是否做得正确,它只是一个错误的阳性结果,还是我做错了,只是碰巧忽略了它的工作。

<Grid Background="{DynamicResource AppDefaultBackgroundColor}">
...
</Grid>

那么,如果我正确地使用了它,如何摆脱这个警告信息?
如果我使用不当,应该如何更改以避免警告?

附言:我的应用程序可以正常运行,但我希望在编译时没有任何编译警告。


2
资源是从哪里加载的?你可能只需要更改项目的编译顺序。 - David Veeneman
从App.xaml中,这恰好是包含此UserControl的同一项目。 - myermian
2
如果你正在使用设计工具:把它扔掉,可以消除90%的错误和警告。(注意:这个数字是虚构的,可能不完全准确) - H.B.
2
我也在使用VS 2010,但我不使用它的设计工具。(右键单击XAML文件->打开方式...->源代码(文本)编辑器->设置为默认值->确定)这样我就从来没有收到过任何警告,已经有几次人们在SO上提供解决方案时说到了我不知道的警告,而设计工具则无法处理。 - H.B.
1
为什么要使用DynamicResource?如果资源在您的App.xaml中,而用户控件在同一程序集中,则为什么不将其设置为StaticResource! - Kolky
1
根据这里的评论,"DynamicResource在加载时将Expression对象分配给属性,但实际上直到运行时才查找资源,当Expression对象被要求提供值时。这样可以推迟查找资源,直到运行时需要它。" 因此忽略IDE警告。如果在运行时正确解决,它将消失! - JGFMK
1个回答

6
您可以这样映射您的资源:
<Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary <b>Source="..\Resources\Theme.xaml"</b> />
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Resources>

Theme.xaml必须像这样包含'AppDefaultBackgroundColor'

 <Color x:Key="AppDefaultBackgroundColor">#FF77C6FB</Color>

我猜 **Source 是试图在代码块中显示加粗文本的结果?只是好奇因为设计器不喜欢那种语法。 - Zack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接