2010-09-16 22 views
10

Considera un file | Nuovo progetto di un'applicazione WPF che contiene:Perché sono necessari uri assoluti per i dizionari uniti in Generic.xaml?

  1. Un nuovo controllo personalizzato denominato CustomControl1
  2. Due nuovi dizionari risorsa chiamata Dictionary1 e Dictionary2

Prendere lo stile generato fuori generic.xaml e spostarlo al dizionario2. Quindi unire Dictionary2 in Dictionary1 e Dictionary1 in generico come questo:

<!--Generic.xaml--> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="pack://application:,,,/Themes/Dictionary1.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

<!--Dictionary1.xaml--> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="Dictionary2.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

Quindi, aggiungere un'istanza di CustomControl1 nella rete di MainWindow. (Questa parte è necessaria per riprodurre il problema.Il progetto compila sempre bene - solo in fase di esecuzione viene visualizzato il problema, e i dizionari devono essere referenziati.)

In Dictionary1.xaml sto unendo in un altro dt nello stesso cartella, quindi una semplice sorgente = "Dictionary2.xaml" funziona. Eppure in Generic.xaml devo usare un URI assoluto. Se modifico quanto sopra per essere Source = "Dictionary1.xaml" senza il pacchetto: // roba di applicazione allora ricevo una XamlParseException causata da una IOException "Impossibile trovare la risorsa 'dictionary1.xaml'" quando tenta di costruire la MainWindow.

La mia domanda:Cosa c'è di speciale in generic.xaml per quanto riguarda la risoluzione relativa dell'URI e perché?

risposta

0

Solo una supposizione: generic.xaml deve essere accessibile dalle assemblee fuori pure, quindi è un modo per garantire che le risorse possono essere trovate da qualsiasi luogo, utilizzando URI assoluti. Come ho detto, è solo una pugnalata al buio, non è sicuro.

10

Mi scusi perché non ho la possibilità di scrivere commenti, quindi lo postò come risposta.

Ho la stessa situazione e tutto funziona bene per me. Non ho bisogno di mettere "pacchetto: // applicazione" nel percorso in Generic.xaml. Ma solo quando il tipo di output di un assieme è "Applicazione Windows". Per "Libreria di classi" Devo aggiungere il nome dell'assieme al percorso (Source="/ClassLibarayAssemblyName;component/Themes/Dictionary1.xaml") perché senza di esso il motore WPF tenta di cercare Dictionary1.xaml nell'assembly principale dell'applicazione.

Il framework di destinazione in entrambi i casi è "Profilo client .NET Framework 4"

Problemi correlati