2013-03-05 14 views
6

Ho recentemente aggiornato a VS 2012, ho dovuto come ho bisogno di iniziare a utilizzare. NET 4.5 ma che è oltre il punto. Il mio problema è il seguente:La risorsa "x" non può essere risolta.

Ho un ResourceDictionary nel mio progetto principale chiamata AppStyles.xaml, e nel App.Xaml Ho il seguente:

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="AppStyles.xaml"/> 
    <ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Nel mio ResourceDictionary v'è uno stile, e ho potuto quindi applicare questo stile per qualsiasi pulsante in qualsiasi dei miei progetti impostando Style={StaticResource MyButton}.

Dopo l'aggiornamento a VS 2012 Ho notato che ho l'errore nel titolo molto, e qualche volta mi impedisce di debug e talvolta non è così!

C'è un modo diverso che dovrei fare questo o c'è un problema in VS 2012?

+0

vuoi dire che si ottiene problemi durante la fase di progettazione di qualcosa non essere trovato? Ma puoi compilare e funziona bene, giusto? –

+0

Ottengo errori in fase di progettazione dicendo che la risorsa non è stata trovata. Ma a volte posso correre, e mostra anche i pulsanti correttamente! Ma altre volte lo interrompe dal debug. –

+0

Hai codice per AppStyles.xaml? (L'ho fatto e ciò ha impedito a VS di caricarlo in fase di progettazione) Un altro problema potrebbe essere l'inclusione di AppStyles.xaml come risorsa che lavora in fase di compilazione, ma non in fase di progettazione. Dovrebbe essere una 'Pagina'. – Wouter

risposta

5

Ho anche questo problema di volta in volta in VS2010. A volte il problema si risolverà se creo una "soluzione pulita" e una "soluzione di ricostruzione". Se ciò non funziona, di solito riavvio VS2010.

ho anche ribattezzato Style x: chiave per qualcosa d'altro e il problema era sparito. Ma io non trovare questa soluzione sia perfetto ...

<Application.Resources> 
<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 

    <!-- Load Infrastructure's Resource Dictionaries --> 
    <ResourceDictionary Source="/MyProject.Modules.Infrastructure;component/ResourceDictionaries/ResourceLibrary.xaml" /> 

    </ResourceDictionary.MergedDictionaries> 

    <!-- Workaround for ResourceDictionary loading bug/optimization --> 
    <Style TargetType="{x:Type Rectangle}" /> 

</ResourceDictionary> 

riferimento a questa domanda per quanto riguarda la soluzione alternativa nel mio codice di esempio: Trouble referencing a Resource Dictionary that contains a Merged Dictionary

+0

Ho pulito, ricostruito, riavviato e anche riavviato il mio computer! Questo errore continua a spuntare e non ha senso, funzionava perfettamente un secondo e l'altro non poteva più compilare! –

+0

Hmm. Questo è così strano Hai provato a rinominare le tue chiavi di stile? – hijack

+0

Sì, lo so, il problema rimane! Non mi impedisce più di compilare, ma nessuno dei miei controlli personalizzati che usano questo stile può essere mostrato nel design! –

4

è possibile creare un progetto comune o l'infrastruttura da cui altri progetti faranno riferimento. Aggiungi le risorse reseuce. Quindi crea un URI di pacchetto. quindi fare riferimento a UserControl o finestra risorse all'interno di un dizionario risorse

<...Resources> 
<ResourceDictionary> 
    <!-- Resource Dictionaries --> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary 
      Source="pack://application:,,,/Common;component/Dictionaries/Styles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

In UserControl o utilizzare Window.Resources nel caso di una finestra. Questo funziona per me.

10

WPF non è in grado di risolvere il dizionario risorse che si sta tentando di unire. Quando si crea un dizionario unito, WPF segue una serie di regole per tentare di risolvere l'URI. Nel tuo caso, l'URI è ambiguo, quindi WPF non è in grado di risolverlo in modo affidabile.

Modificare l'URI Source nello App.xaml in un URI di pacchetto assoluto. Ad esempio, se si progetto si chiama MyProject (cioè .: "MyProject" è il nome di montaggio corta), allora si dovrebbe cambiare il Source in App.xaml a:

Questo presuppone AppStyles.xaml è nella radice di MyProject. È possibile specificare facoltativamente l'autorizzazione, la versione dell'assembly e le informazioni sulla chiave pubblica dell'assieme firmato. Tuttavia, si dovrebbe essere al sicuro con il nome breve dell'assembly (MyProject, nell'esempio precedente).

Vedere questa pagina su MSDN per ulteriori dettagli sul pack URI in WPF: http://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx

1

è possibile aggiungere il dizionario risorse al progetto quindi modificare la sua azione build per risorse e quindi provare a aggiungere le sue uri nel codice come segue:

<ResourceDictionary> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary 
     Source="/Styles.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

o semplicemente lasciare che il processo di vs2012 esso utilizzando la scheda proprietà ...

+0

cambiando l'azione di costruzione del dizionario in * Risorsa * non cambia nulla – superjos

3

è possibile utilizzare il percorso relativo alla cartella appStyles.xaml. spero che questo ti aiuti.

qualcosa di simile sotto

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Resources/Styles.xaml"></ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
<ResourceDictionary> 
Problemi correlati