2013-03-05 86 views
6

我最近升级到VS 2012,我不得不根据需要开始使用.net 4.5,但除此之外。我的问题是这样的:资源“x”无法解析。

我有一个ResourceDictionary我叫AppStyles.xaml主体工程,并在App.Xaml我有以下几点:

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

在我ResourceDictionary有一种风格,然后我可以申请这种风格,通过设置Style={StaticResource MyButton}我的任何项目中的任何按钮。

升级到VS 2012后,我发现我在标题中出现了很多错误,有时它会阻止我进行调试,有时它不会!

有没有不同的方式,我应该这样做,或者在VS 2012有问题吗?

+0

你的意思是你在设计时对一些问题没有被发现?但是你可以编译并运行正常,对吧? – 2013-03-05 13:26:06

+0

我在设计时遇到错误,说找不到资源。但有时我可以运行,甚至可以正确显示按钮!但有时候会阻止它进行调试。 – 2013-03-05 13:35:34

+0

你有代码隐藏AppStyles.xaml吗? (我做了,并停止了VS在设计时加载它)另一个问题可能包括AppStyles.xaml作为资源,它在编译时工作,但不是在设计时。它应该是一个'页面'。 – Wouter 2014-04-28 21:08:44

回答

5

我在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

+0

我已清理,重建,重新启动,甚至重新启动我的电脑!这个错误一直在弹出,它没有任何意义,它完美地运行了一秒,接下来它不能再编译了! – 2013-03-06 07:24:28

+0

嗯。这太奇怪了。你有没有尝试重新命名你的风格键? – hijack 2013-03-06 08:32:43

+0

是的,问题依然存在!它不会阻止我再编译,但是没有一个使用这种风格的自定义控件可以在设计中显示出来! – 2013-03-06 08:45:44

4

您可以创建一个公共或基础设施项目从其他项目将参考。添加您的资源。然后创建一个包URI。 然后在用户控件或窗口资源的资源字典

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

在窗口的情况下,用户控件或使用Window.Resources中引用。这对我有用。

10

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

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

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

在WPF上的Pack URI的详细信息,请参阅MSDN上的这个页面:http://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx

1

您可以添加资源字典到你的项目,然后改变它的生成操作资源,然后尝试添加其URI的代码如下:

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

或干脆让vs2012过程中它通过使用属性选项卡...

+0

将字典构建操作切换为* Resource *不会改变任何内容 – superjos 2015-03-08 23:06:35

3

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

类似下面

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Resources/Styles.xaml"></ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
<ResourceDictionary> 
相关问题