我正在构建一个WPF应用程序,在尝试引用资源字典时遇到了一个错误。在我的WPF应用程序项目中,我有一个名为“Styles”的文件夹,其中包含我的应用程序的所有xaml样式模板:
在我的app.xaml文件中,我有这个:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/MetroTheme.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
然而,当我将鼠标悬停在source属性上时,我得到一个错误,说“Anerror occurred while finding the resource dictionary“Styles/MetroTheme.xaml”。我可以在Visual Studio和文件系统中的文件夹中看到xaml文件。
我还尝试了“/Styles/MetroTheme.xaml”和源属性的packURI,但都没有成功。任何想法,为什么我得到这个文件找不到错误?
5条答案
按热度按时间klh5stk11#
我也遇到了同样的问题,但是设置 * Build Action = Page * 并没有解决我的问题。我需要使用Pack URI Format。所以,
编辑
事实证明,上述方法可以消除构建错误,但仍然会导致运行时错误。我需要包括完整的程序集规范以获得完整的解决方案(即使所有文件都在同一个程序集中):
q9rjltbz2#
确保MetroTheme.xaml的构建操作设置为Page。
uurity8g3#
有时关闭Visual Studio并再次打开它可以解决此问题。
8ulbf1ek4#
我确认它是因为相对uri上的一些奇怪行为。
举例来说:
/SubProjectDir/WhatThingDir/YourResource.xaml
/SubProjectDir/AnotherDir/YourControl.xaml
/MainExecution/MainWindow.xaml
它看起来在设计师工作得很好。但是当你运行它的时候,会抛出找不到资源的异常。
因为
/WhatThingDir/YourResource.xaml
的意思是“从当前根路径查找相关资源”,但是现在MainWindow
构造了YourControl
,所以当前根路径在MainExecution
下开始。然后,它尝试在MainExecution
中找到资源路径/WhatThingDir/YourResource.xaml
。一定失败了!但如果你写这个,它会工作得很好:
/SubProjectDir/AnotherDir/YourControl.xaml
这将在
/SubProjectDir/AnotherDir/../WhatThingDir/YourResource.xaml
=>/SubProjectDir/WhatThingDir/YourResource.xaml
中查找资源。没事了!
rpppsulh5#
在项目属性中将目标.net版本更改为旧版本,然后重置为以前的版本。