2011-01-01 22 views
38

Vedo un sacco dichiarazioni comex: significato in XAML

<TextBox x:Name="txtInput" />

o come

<BooleanToVisibilityConverter x:Key="boolToVis" /> 

perché è necessaria la x: e quello che mi dà.

<DockPanel.Resources> 
    <c:MyData x:Key="myDataSource"/> 
</DockPanel.Resources> 

E qui abbiamo anche i c:

Grazie per l'aiuto

risposta

59

E non è altro che scorciatoie per i diversi spazi dei nomi per XML. Puoi sceglierli come preferisci.Se si guardano le linee superiori nel vostro XAML troverete la linea:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

Cambiare il 'x' a 'wpf' per esempio, e vedrete che è necessario modificare tutti i 'x:' prefissi in il codice per 'wpf:' per renderlo compilare.

Il prefisso "c:" fa riferimento al proprio codice. Supponiamo che tu abbia una libreria di classi che compila su MyLib.dll. Questa libreria contiene una classe denominata MyData. Per essere in grado di fare riferimento alla classe MyData avete bisogno di qualcosa di simile:

xmlns:c="clr-namespace:MyClasses;assembly=MyLib" 

nell'intestazione XAML.

È quindi possibile fare riferimento alla classe MyData in XAML con c:MyData. Ma voi siete del tutto liberi di cambiare il 'c' a 'myfabulousclasses' o qualsiasi altra cosa si voglia.

Lo scopo di questo? Per distinguere classi o membri che hanno lo stesso nome, ma appartengono a dll differenti.

6

Fa parte di un namespace. Nell'esempio, c: prefix viene utilizzato per indicare che il tag MyData appartiene a questo spazio dei nomi. Si può dare un'occhiata allo following article su MSDN che spiega lo x: prefix in XAML.

+2

Per essere chiari: XAML è basato su XML e il prefisso 'x:' è il prefisso per uno spazio dei nomi XML definito nell'intestazione. –

13

La x: Prefisso

Nel precedente esempio, elemento principale, il prefisso x: è stato utilizzato per mappare lo spazio dei nomi XAML http://schemas.microsoft.com/winfx/2006/xaml, che è lo spazio dei nomi XAML dedicato che supporta costrutti del linguaggio XAML. Questo prefisso x: viene utilizzato per mappare questo spazio dei nomi XAML nei modelli per i progetti. Lo spazio dei nomi XAML per il linguaggio XAML contiene diversi costrutti di programmazione che userete molto frequentemente nel vostro XAML. Quello che segue è un elenco delle x più comuni: la programmazione del prefisso costruisce utilizzare:

x: Key: Imposta una chiave univoca per ogni risorsa in un ResourceDictionary (o concetti del dizionario simili in altri contesti). x: Key probabilmente rappresenterà il 90% della x: usage vedrai in un tipico markup dell'applicazione WPF.

x: Classe: Specifica lo spazio dei nomi CLR e il nome di classe per la classe che fornisce code-behind per una pagina XAML. È necessario disporre di una classe di questo tipo per supportare code-behind per il modello di programmazione WPF, e quindi si vede quasi sempre x: mappato, anche se non ci sono risorse.

x: Nome: specifica un nome oggetto runtime per l'istanza esistente nel codice runtime dopo un elemento oggetto viene elaborato. In generale, si utilizza frequentemente una proprietà equivalente definita da WPF per x: Name. Tali proprietà si associano in modo specifico a una proprietà di back-up CLR e sono quindi più convenienti per la programmazione delle applicazioni, in cui si utilizza frequentemente il codice temporale di esecuzione per trovare gli elementi denominati da XAML inizializzato. La proprietà più comune è FrameworkElement.Name. È comunque possibile utilizzare x: Name quando la proprietà Nome a livello di framework WPF equivalente non è supportata in un particolare tipo. Ciò si verifica in alcuni scenari di animazione.

x: statici: Permette un riferimento che restituisce un valore statico che non è altrimenti una proprietà XAML-compatibili.

x: Tipo: costruisce un riferimento Type basata su un nome del tipo. Questo è usato per specificare gli attributi che assumono Type, come Style.TargetType, sebbene la proprietà abbia frequentemente una conversione string-to-type nativa in modo tale che l'utilizzo dell'estensione di markup x: Type sia facoltativo.

http://msdn.microsoft.com/en-us/library/ms752059.aspx http://msdn.microsoft.com/en-us/library/ms753327.aspx