2013-01-11 17 views
10

Ho un file styles.xaml che elenca un set di colori. Questi colori definiscono il modo in cui vengono mostrati determinati elementi all'interno di una parte dell'applicazione e quindi vengono utilizzati attraverso un convertitore.Come utilizzare gli stili da file xaml separati

Vorrei creare una legenda di questi colori in un'altra parte dell'applicazione e avere un elenco di pulsanti di attivazione che mi piacerebbe impostare i colori di sfondo sui colori definiti in styles.xaml.

Dovrei in qualche modo includere il file styles.xaml nel file xaml che definisce i pulsanti di attivazione/disattivazione? O c'è un modo in cui posso legare direttamente a questi valori di colore?

risposta

26

Aggiungi styles.xaml al App.xaml

<Application.Resources> 
    <ResourceDictionary > 
     <ResourceDictionary.MergedDictionaries >  
      <ResourceDictionary Source="styles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
+0

provato a farlo, ma sto ottenendo il seguente errore: Tutti gli oggetti aggiunti a un IDictionary deve avere un Attributo chiave o qualche altro tipo di chiave associato ad essi. styles.xaml contiene solo un resourceDictionary e tutti gli elementi hanno chiavi (tranne per i sottoelementi di elementi). –

+1

Aggiungi le chiavi agli stili in "styles.xaml". O anche "styles.xaml" dovrebbe essere un . –

+1

Sì, è necessario impostare x: Chiave per tutti i colori in styles.xaml – chameleon86

3

Note Attribution for the following content/answer should go to @Chris Schaller . This answer's content was originally posted as an edit to @chameleon86 answer and was rejected (see also this meta). However I think, this is some valuable content and so I am 'reposting' it.

Per rendere le definizioni di cui styles.xaml a disposizione di tutti XAML all'interno dell'applicazione, aggiungere styles.xaml a App.xaml

<Application.Resources> 
    <ResourceDictionary > 
     <ResourceDictionary.MergedDictionaries > 
      <ResourceDictionary Source="styles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
     <!-- You can declare additional resources before or after Merged dictionaries, but not both --> 
     <SolidColorBrush x:Key="DefaultBackgroundColorBrush" Color="Cornsilk" /> 
     <Style x:Key="DefaultBackgroundColor" TargetType="TextBox"> 
      <Setter Property="Background" Value="{StaticResource DefaultBackgroundColorBrush}" /> 
     </Style> 
    </ResourceDictionary> 
</Application.Resources> 

Per capire come funziona, in fase di runtime la finestra, la pagina o il controllo esisteranno come elementi figlio dell'albero visivo dell'applicazione in esecuzione.

tua domanda iniziale ha osservato:

"These colors define how certain elements within one part of the application..."

Se avete solo bisogno di queste risorse di stile disponibili per alcuni pagine XAML o finestre, e non tutti di loro, allora si può ancora usare questo modello per unire il locale risorse per una finestra, o per griglie o altri controlli direttamente.

  • Si noti che facendo ciò, questi stili sono disponibili solo per elementi figlio dell'elemento dichiarato come Dizionario risorse.

Vedi come è semplice ambito il riferimento di stile per una singola griglia per l'uso:

<Grid> 
    <Grid.Resources> 
     <ResourceDictionary > 
      <ResourceDictionary.MergedDictionaries >  
       <ResourceDictionary Source="styles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
      <!-- You can declare additional resources before or after Merged dictionaries, but not both --> 
     </ResourceDictionary> 
    </Grid.Resources> 
    <!-- 
     Grid Content :) 
     --> 
</Grid> 
Problemi correlati