无法在运行时找到资源字典文件

时间:2012-07-27 16:00:40

标签: wpf themes

我正在开发一个用户控件并在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'。

发生了什么事?

2 个答案:

答案 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用作默认值,并且可以在不合并的情况下访问其资源。