2012-07-27 178 views
3

我正在开发一个用户控件并在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:异常已被抛出通过的目标调用。 ---> System.Reflection.TargetInvocationException:调用的目标引发了异常。 ---> System.Reflection.TargetInvocationException:调用的目标引发了异常。 ---> System.Windows.Markup.XamlParseException:'Set property'System.Windows.ResourceDictionary.Source'抛出一个异常。'行号“16”和行位置“18”。 ---> System.IO.IOException:找不到资源'themes/classic.xaml'。

这是怎么回事?

+0

注意,按照http://stackoverflow.com/questions/17083370/why- do-modify-project-output-directories-cause-ioexception-was-unhandled的输出路径也是一个问题。 – nietras 2013-11-11 16:53:40

回答

8

我最后不得不使用包括集名称的语法......不要问我为什么

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/assemblyname;component/Themes/Classic.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 
+1

正确的语法是/ assemblyname; component ...而不是逗号,因为你有。 – sexta13 2014-04-17 01:33:29

+0

我感谢人..我不知道WPF与相对路径有什么样的问题,我刚开始怀疑我的存在。 – LuckyLikey 2017-06-23 12:21:00

1

您好,没有斜杠的尝试,我们使用斜杠时,生成操作是内容或其他,但对于ResourceDictionary生成操作是页。

<ResourceDictionary Source="Themes/Classic.xaml"/> 
<ResourceDictionary Source="Themes/Generic.xaml"/> 

我希望这会有所帮助。这些资源字典必须具有其他名称,因为在同一项目的主题文件夹中Generic.xaml用作默认值,并且可以在不合并它的资源的情况下访问其资源。