我正在开发一个用户控件并在ElementHost中使用它。我按如下方式定义资源字典:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Themes/Classic.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
在我的VS资源管理器中,我有这个
Project (the user control library)
|_ Themes
|__ Generic.xaml (Build Action = Page)
|__ Classic.xaml (Build Action = Page)
没有编译错误,VS设计师似乎拿起了Classic.xaml中定义的资源
但是,它在运行时崩溃,但有以下异常:
System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---&GT; System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---&GT; System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---&GT; System.Windows.Markup.XamlParseException:'Set property'System.Windows.ResourceDictionary.Source'引发了一个异常。行号“16”和行位置“18”。 ---&GT; System.IO.IOException:找不到资源'themes / classic.xaml'。
发生了什么事?
答案 0 :(得分:8)
我最终不得不使用包含程序集名称的语法...不要问我为什么
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/assemblyname;component/Themes/Classic.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
答案 1 :(得分:1)
嗨尝试没有斜杠,我们在Build Action是Content或其他时使用斜杠但是对于ResourceDictionary构建Action是Page。
<ResourceDictionary Source="Themes/Classic.xaml"/>
<ResourceDictionary Source="Themes/Generic.xaml"/>
我希望这会有所帮助。您必须为这些资源字典设置一些其他名称,因为在同一项目的Themes文件夹中,Generic.xaml用作默认值,并且可以在不合并的情况下访问其资源。