2010-05-20 22 views
10

我想在外部DLL中創建一個名爲DataTemplate.xaml的ResourceFile,並在WP7頁面中使用它。當我做我的頁面的標題之後,我得到一個錯誤在WindowsPhone 7應用程序中使用外部ResourceDictionary

<ResourceDictionary Source="pack://application:,,,/WP7SharedClassLibrary;component/DataTemplate.xaml" />

的錯誤是 「當前項目不支持‘應用’作爲包URI的授權組成部分。」

有沒有人遇到過這個並解決了這個問題?

回答

1

我在嘗試共享XAML ResourceDictionary文件時嘗試了包語法,並且得到了相同的錯誤消息。我結束了使用這種語法,它爲我工作。

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/MyDLLName;component/Folder/MyXAMLFile.xaml"/>     
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
+0

不適用於我。給出「屬性/WP_Utilities;component/Resources/PerformanceProgressBar.xaml值超出範圍[Line:17 Position:37] --- Inner Exception --- KeyNotFoundException」運行時出錯。什麼是MyXAMLFile.xaml文件的構建類型? – 2011-01-23 00:06:57

0

Silverlight不支持包URI。這是一個WPF功能。

如果您在Silverlight中檢查Image對象的Source屬性的類型,它是Uri。但在WPF來源是依賴屬性與類型的ImageSource.

13

我已經成功地得到這個使用以下步驟工作:

  1. 創建使用「Windows Phone應用程序」標準的WP7應用名爲「WP7ExternalResourcesTest」的應用程序模板。
  2. 使用名爲「WP7ExternalResourcesTestLibrary」的「Windows Phone類庫」模板將項目添加到相同的解決方案。
  3. 從庫項目中刪除默認的Class.cs文件。
  4. 使用「XML文件」模板添加名爲「External.xaml」的文件,並將「構建操作」設置爲「頁面」。
  5. 添加以下XAML到新的XAML文件:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
        <SolidColorBrush x:Key="ForegroundBrush" Color="Red" /> 
    </ResourceDictionary> 
    
  6. 建庫項目,然後加入從WP7ExternalResourcesTest項目對它的引用。
  7. 在WP7ExternalResourcesTest,打開App.xaml中,改變了Application.Resources部分如下:

    <Application.Resources> 
        <ResourceDictionary> 
         <ResourceDictionary.MergedDictionaries> 
          <ResourceDictionary Source="/WP7ExternalResourcesTestLibrary;component/External.xaml" /> 
         </ResourceDictionary.MergedDictionaries> 
        </ResourceDictionary> 
    </Application.Resources> 
    
  8. 在MainPage.xaml中,加入Foreground="{StaticResource ForegroundBrush}"到名爲 「的PageTitle」 的TextBlock
  9. 在仿真器中運行應用程序。最終結果是TextBlock以紅色正確顯示了「頁面名稱」字樣。

希望這會有所幫助。

+0

Doh!看起來我忘了第6步:-(在我的情況下,我不僅需要引用外部項目,還需要引用外部項目所基於的另一個項目的WP_Utilities.DLL。感謝您的詳細介紹! – 2011-01-26 22:22:42

+0

此外,我剛剛發現,WP8不喜歡在引用的程序集名稱中有句號。如果您無法正常工作,那可能是您的問題。 – moswald 2013-06-20 01:51:45

+0

所以你真的需要把ResourceDictionary放在一個單獨的程序集中嗎? – 2014-11-11 07:17:15

相關問題