2009-05-13 10 views
6

Ho modificato l'azione di generazione della mia app.xaml in "Pagina" in modo da poter gestire una schermata iniziale e assicurarmi che la mia applicazione venga eseguita come una singola istanza solo (avendo il mio punto di ingresso). Funziona bene in fase di esecuzione ma in fase di progettazione l'applicazione non può più vedere le mie risorse. Le risorse sono in file xaml separati che si trovano nello stesso progetto. Come posso fare in modo che la mia app riveda le risorse in fase di progettazione?WPF - accesso alle risorse in fase di progettazione quando l'azione Build di App.xaml = Pagina

Grazie

+0

Posso passare avanti e indietro - modifica l'azione di creazione di App.xaml in Pagina quando sono pronto per la pubblicazione e lo cambio indietro durante lo sviluppo. Ma è questo che dovrei fare? –

risposta

0

Se ho ben capito si corregge, si sta caricando le risorse a livello di applicazione nel App.xaml? In questo caso si può fare in questo modo:


App app = new App(); 
//Get assembly name is your own method 
string assemblyName = GetAssemblyName(Assembly.GetExecutingAssembly()); 

Uri resourceLocater = new Uri("/" + assemblyName + ";component/app.xaml", UriKind.Relative); 
System.Windows.Application.LoadComponent(app, resourceLocater); 
MainWindow mainWindow = new MainWindow(); 
app.Run(mainWindow); 

Poi le risorse verranno caricati

/Daniel

+6

La domanda originale dice che il problema si verifica solo in fase di progettazione. Mi sembra che il codice sopra non abbia alcun effetto in fase di progettazione. Cosa mi manca? (Ho lo stesso problema: funziona bene in fase di esecuzione, ma ottengo "Riferimento a StaticResource ... errore non trovato" in fase di progettazione) – CyberMonk

+1

Non sarà di aiuto. Vedi la risposta che ho appena aggiunto. Gustavo, perché hai contrassegnato questo come corretto? –

3

Assicurarsi che si sta chiamando InitializeComponent() come la prima linea del costruttore dell'applicazione:

public App() 
{ 
    // This is the method generated by VisualStudio that initializes 
    // the application from associated XAML file 
    InitializeComponent(); 

    // Do everything else 
} 
+1

OMG, intendo OMFG. Ho lottato con il progettista non trovando le mie risorse statiche in un progetto di controllo separato, in cui il progetto principale ha l'app.xaml che carica e unisce i dizionari. La creazione di un'app.xaml nel progetto controls e quindi l'eliminazione per avere i dizionari delle risorse e quella chiamata InitializeComponent() ha fatto qualcosa di totalmente inaspettato: ha funzionato! i controlli all'interno dei controlli ora stanno eseguendo il rendering anziché lamentarsi delle risorse mancanti, anche gli errori intellisense nella vista xaml sono andati - oh buon giorno !!!! – Erikest

6

Calcola le risorse in un dizionario di risorse separato e quindi inseriscile in App.xaml in questo modo:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MasterResources.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

È possibile aggiungere più dizionari di risorse in questo modo, se necessario.

è anche bisogno di fare la stessa cosa in UserControls (e Windows che controlli utente di riferimento utilizzando le risorse):

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MasterResources.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

Vedi http://ithoughthecamewithyou.com/post/Merging-Resource-Dictionaries-for-fun-and-profit.aspx per più su questo argomento.

+6

Quando ho usato questo approccio, ho finito con copie separate delle risorse definite in MasterResources.xaml per ogni UserControl che le unisce, il che porta alla memoria in modo orribile. –

+2

Esattamente. La condivisione o le risorse grafiche e gli stili tra i componenti dell'interfaccia utente è un aspetto chiave della codifica di un'interfaccia utente WPF, tuttavia non sembra esserci alcun supporto per la modalità di progettazione e la raccomandazione MS di copiare semplicemente le risorse ovunque si utilizzino loro sono semplici assurdità. – Neutrino

+0

Questa dovrebbe essere la risposta accettata. Il collegamento in particolare descrive esattamente lo stesso scenario che è stato sollevato nella domanda. Ho anche riscontrato lo stesso problema e ho scoperto che unire tristemente dizionari in ogni singola finestra e usercontrol sembra essere l'unica soluzione per il progettista che non riesce a risolvere le risorse.WPF dovrebbe essere questa grande tecnologia, ma ultimamente mi sento come se fossi costretto a usare un hack dopo l'altro per farlo funzionare. – Eternal21

Problemi correlati