2010-05-20 6 views
10

Sto tentando di creare un file di risorse chiamato DataTemplate.xaml in una DLL esterna e utilizzarlo in una pagina WP7. Quando faccio la seguente nell'intestazione della mia pagina io ottenere un erroreUtilizzare un ResourceDictionary esterno in un'applicazione WindowsPhone 7

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

L'errore è "progetto corrente non supporta 'applicazione' come l'autorità componente del branco URI".

Qualcun altro ha trovato questo e risolto questo?

risposta

1

Ho provato la sintassi del pacchetto durante il tentativo di condividere i file XAML ResourceDictionary e ho ricevuto lo stesso messaggio di errore. Ho finito per usare questa sintassi e ha funzionato per me.

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

Non funziona per me. Fornisce "Attributo /WP_Utilities;component/Resources/PerformanceProgressBar.xaml valore non compreso nell'intervallo. [Riga: 17 Posizione: 37] --- Eccezione interna --- KeyNotFoundException" errore in fase di esecuzione. Qual è il tipo di build del tuo file MyXAMLFile.xaml? –

0

Silverlight non supporta gli URI del pacchetto. È una funzionalità WPF.

Se si esamina il tipo della proprietà Source per l'oggetto Image in Silverlight è Uri. Ma in WPF la sorgente è una proprietà di dipendenza con un tipo di ImageSource.

13

sono riuscito a farlo funzionare utilizzando le seguenti operazioni:

  1. Creato un'applicazione WP7 standard utilizzando il "Windows Phone Application" modello di applicazione denominato "WP7ExternalResourcesTest".
  2. Aggiunto un progetto alla stessa soluzione utilizzando il modello "Libreria di classi Windows Phone" denominato "WP7ExternalResourcesTestLibrary".
  3. Rimosso il file Class.cs predefinito dal progetto di libreria.
  4. Aggiunto un file chiamato "External.xaml" utilizzando il modello "File XML" e impostare "Crea azione" su "Pagina".
  5. aggiunto il seguente XAML per il nuovo file 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. costruito il progetto di libreria, e poi ha aggiunto un riferimento ad esso dal progetto WP7ExternalResourcesTest.
  7. In WP7ExternalResourcesTest, aperto App.xaml e cambiato la sezione Application.Resources al seguente:

    <Application.Resources> 
        <ResourceDictionary> 
         <ResourceDictionary.MergedDictionaries> 
          <ResourceDictionary Source="/WP7ExternalResourcesTestLibrary;component/External.xaml" /> 
         </ResourceDictionary.MergedDictionaries> 
        </ResourceDictionary> 
    </Application.Resources> 
    
  8. In MainPage.xaml, ha aggiunto Foreground="{StaticResource ForegroundBrush}" al TextBlock denominato "PageTitle".
  9. Eseguire l'applicazione nell'emulatore. Il risultato finale è stato che il TextBlock ha visualizzato correttamente le parole "nome della pagina" in rosso.

Spero che questo aiuti.

+0

Doh! Sembra che ho dimenticato il punto 6 :-(Nel mio caso ho dovuto fare riferimento non solo al progetto esterno ma anche al WP_Utilities.DLL di un altro progetto su cui si basava il progetto esterno. Grazie per la dettagliata redazione! –

+0

Inoltre, ho appena scoperto che a WP8 non piace avere un punto nel nome dell'assembly referenziato. Se hai problemi a farlo funzionare, potrebbe essere il tuo problema. – moswald

+0

quindi è davvero necessario inserire ResourceDictionary in un assembly separato? –

Problemi correlati