2012-07-27 73 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用作默認值,並且可以在不合並它的資源的情況下訪問其資源。