2010-01-29 2 views
5

Durante la definizione di stile nel dizionario risorse è possibile utilizzare siaWPF stili: differenza tra x: Nome e x: Tipo

x:Name="xyz" 

e

x:Type="xyz". 

e possono fare riferimento a questo stile in XAML come {StaticResource xyz}.

maggior parte degli esempi usano 'x: Key', e la differenza tra 'nome' e 'chiave' è che l'utilizzo di 'x: nome' consente di utilizzare questa definizione stile code-behind?

FISSI: La domanda è completamente sbagliata. Quello che si chiedeva era la differenza tra x: Key e x: Name. Ma non sono andato a provare questo codice da solo, ma facevo semplicemente affidamento sui ricordi - pensavo di avere entrambi in ResourceDictionary, il che era sbagliato. E inoltre non avevo questo codice in

<xxx.Resources > 

sezioni, poiché non funziona neanche. Non puoi fare riferimento a Style che non ha x: Key (x: Name non funziona qui), e aggiungendo due stili senza x: Key lancia un'eccezione poiché entrambi ottengono la stessa chiave (vuota?) Nel dizionario.

Ray mette tutta la differenza in un modo molto bello, grazie.
Colpa mia

+0

Questa è una domanda trabocchetto –

risposta

9

Questa è una domanda trabocchetto . In realtà, si non può definire uno stile in un ResourceDictionary utilizzando

x:Type="xyz" 

o

x:Name="xyz" 

Ecco la differenza:

  • x:Type="xyz" non è la sintassi XAML valida.
  • x:Name="xyz" è effettivamente sintassi XAML valida che denomina un oggetto (che influisce sulla generazione di code-behind) ma non fornisce una chiave di dizionario.
  • x:Key="xyz" è anche sintassi XAML valida che fornisce una chiave di dizionario ma non assegna un nome a un oggetto.

In un dizionario è necessaria una chiave, quindi è necessario specificare x:Key (eccetto che per i FrameworkTemplate e le sue sottoclassi la chiave può essere dedotta dalla TargetType o DataType). In un dizionario è anche possibile specificare x:Name se lo si desidera, ma non influisce sulla chiave.

Si noti che x:Type è un'estensione di markup che è predefinita da XAML, mentre x:Name e x:Key sono parole chiave XAML effettive. Così x:Type può essere utilizzato solo nella sintassi estensione di markup come il valore di una proprietà:

something="{x:Type whatever}" 

mentre x:Name e x:Key sono attributi che possono essere utilizzati su elementi.

+2

È una domanda a doppio trucco perché in realtà ** nessuno dei due funziona **. Non è possibile definire uno stile in un ResourceDictionary usando 'x: Name =" xyz "'. Solo x: la chiave funziona. – itowlson

+0

No scherzo! Come mi sono perso? E ora cosa farò? Elimina la mia risposta? Modificarlo? Immagino che lo correggerò. Grazie mille. –

+0

Grazie per la risposta. Per favore, fammi sapere se dovrei eliminare questa domanda, o modificare il suo testo per renderlo non complicato. – bybor

2

x: Name consente di creare un punto di riferimento che è possibile utilizzare per nome.

x: tipo consente di creare un riferimento che viene utilizzato da quel tipo

per esempio

<Style TargetType="{x:Type Button}"> 
    ... 
</Style> 

crea uno stile che interesserà automaticamente i pulsanti