资源“x”无法解析。

时间:2013-03-05 13:20:58

标签: wpf xaml visual-studio-2012

我最近升级到VS 2012,因为我需要开始使用.net 4.5,但这不仅仅是重点。我的问题如下:

我的主要项目ResourceDictionary中有AppStyles.xaml,而App.Xaml我有以下内容:

<ResourceDictionary>
  <ResourceDictionary.MergedDictionaries>
     <ResourceDictionary Source="AppStyles.xaml"/>
  <ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

在我的ResourceDictionary中有一个样式,然后我可以通过设置Style={StaticResource MyButton}将此样式应用于我的任何项目中的任何按钮。

升级到VS 2012之后,我注意到我在标题中出现了很多错误,有时它会阻止我调试,有时却没有!

我应该采用不同的方式进行此操作,还是VS 2012中存在问题?

7 个答案:

答案 0 :(得分:11)

WPF无法解析您尝试合并的资源字典。创建合并字典时,WPF遵循一组规则来尝试解析URI。在您的情况下,URI是不明确的,因此WPF无法可靠地解析它。

Source中的App.xaml URI更改为绝对包URI。例如,如果您的项目名为MyProject(即:“MyProject”是简短的程序集名称),那么您应该将Source中的App.xaml更改为:

   <ResourceDictionary 
      Source="/MyProject;component/AppStyles.xaml"/>

这假定AppStyles.xaml位于MyProject的根目录中。您可以选择指定签名程序集的权限,程序集版本和公钥信息。但是,使用短组件名称(在上面的示例中为MyProject)应该是安全的。

有关WPF中包URI的更多详细信息,请参阅MSDN上的此页面:http://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx

答案 1 :(得分:6)

我在VS2010中也经常遇到这个问题。如果我制作“清洁解决方案”和“重建解决方案”,有时问题就会解决。如果不起作用,我通常会重启VS2010。

我还将Style x:Key重命名为其他内容,问题就消失了。但我发现这个解决方案并不完美......

<Application.Resources>
<ResourceDictionary>
  <ResourceDictionary.MergedDictionaries>

    <!-- Load Infrastructure's Resource Dictionaries -->
    <ResourceDictionary Source="/MyProject.Modules.Infrastructure;component/ResourceDictionaries/ResourceLibrary.xaml" />

  </ResourceDictionary.MergedDictionaries>

  <!-- Workaround for ResourceDictionary loading bug/optimization -->
  <Style TargetType="{x:Type Rectangle}" />

</ResourceDictionary>

在我的代码示例中引用有关此变通方法的问题:Trouble referencing a Resource Dictionary that contains a Merged Dictionary

答案 2 :(得分:4)

您可以创建其他项目将引用的公共或基础结构项目。添加您的资源。然后创建一个包URI。 然后在资源字典中的usercontrol或window资源中引用

<...Resources>
<ResourceDictionary>
   <!-- Resource Dictionaries -->
   <ResourceDictionary.MergedDictionaries>
       <ResourceDictionary 
          Source="pack://application:,,,/Common;component/Dictionaries/Styles.xaml"/>
   </ResourceDictionary.MergedDictionaries>

在usercontrol中或在窗口的情况下使用Window.Resources。这对我有用。

答案 3 :(得分:3)

可以使用appStyles.xaml文件夹的相对路径。希望这有帮助。

如下所示

<ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../Resources/Styles.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
<ResourceDictionary>

答案 4 :(得分:1)

您可以将资源字典添加到项目中,然后将其构建操作更改为资源,然后尝试在代码中添加其uri,如下所示:

    <ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
   <ResourceDictionary 
      Source="/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>

或者让vs2012使用属性选项卡...

来处理它

答案 5 :(得分:0)

您还可以在AppStyles.xaml中检查具有相同x:key的样式。这引起了我类似的错误。

答案 6 :(得分:0)

我在Window中放置了一些样式。资源a导致了我的问题

从MainWindow删除所有样式后,问题消失了。

发现了第二个问题:

问题是“平台目标”设置为x64。

将其更改为AnyCPU后,设计中的资源即可工作。

相关问题