2011-01-01 11 views
38

Ich sehe viele Aussagen wiex: in XAML Sinn

<TextBox x:Name="txtInput" />

oder

<BooleanToVisibilityConverter x:Key="boolToVis" /> 

wie Warum die x: benötigt wird und was es gibt mir.

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

Und hier haben wir auch die c:

Vielen Dank für Hilfe

Antwort

59

Es ist nichts anderes als Verknüpfungen zu den verschiedenen Namensräume für XML. Sie können wählen, wie Sie möchten.Wenn Sie an den oberen Zeilen in der XAML schauen, werden Sie die Zeile finden:

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

Ändern Sie den ‚x‘ auf ‚wpf‘ zum Beispiel, und Sie werden sehen, dass Sie alle ‚x:‘ Präfixe ändern müssen in Ihr Code zu 'wpf:', um es kompilieren zu lassen.

Das Präfix 'c:' verweist auf Ihren eigenen Code. Angenommen, Sie haben eine Klassenbibliothek, die nach MyLib.dll kompiliert. Diese Bibliothek enthält eine Klasse namens MyData. Um die MyData Klasse verweisen Sie brauchen so etwas wie:

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

in Ihrem XAML-Header.

Sie können dann auf die MyData-Klasse in Ihrem XAML mit c:MyData verweisen. Aber Sie können völlig frei 'c' zu 'myfabulousclasses' oder etwas anderes, das Sie wünschen.

Der Zweck dieser? Um Klassen oder Mitglieder zu unterscheiden, die denselben Namen haben, aber zu verschiedenen DLLs gehören.

6

Es ist Teil einer namespace ist. In Ihrem Beispiel wird die c: prefix verwendet, um anzuzeigen, dass das MyData-Tag zu diesem Namensraum gehört. Sie können sich die following article auf MSDN ansehen, die die x: prefix in XAML erklärt.

+2

Um es klar zu stellen: XAML basiert auf XML und das Präfix 'x:' ist das Präfix für einen XML-Namespace, der in der Kopfzeile definiert ist. –

13

Die x: Prefix

Im vorherigen Stammelement beispielsweise das Präfix x: wurde verwendet, um den Namensraum XAML http://schemas.microsoft.com/winfx/2006/xaml, abzubilden, die der dedizierte XAML-Namensraum ist, der XAML Sprachkonstrukten unterstützt. Dieses Präfix x: wird verwendet, um diesen XAML-Namespace in den Vorlagen für Projekte zuzuordnen. Der XAML-Namespace für die XAML-Sprache enthält mehrere Programmierkonstrukte, die Sie sehr häufig in Ihrem XAML verwenden werden. Im Folgenden finden Sie eine Auflistung der gängigsten x: Präfix-Programmierkonstrukte, die Sie verwenden werden:

x: Schlüssel: Legt für jede Ressource in einem ResourceDictionary (oder ähnlichen Wörterbuchkonzepten in anderen Frameworks) einen eindeutigen Schlüssel fest. x: Key wird wahrscheinlich 90% der x: Verwendungen ausmachen, die Sie in einer typischen WPF-Anwendung sehen.

x: Klasse: Gibt den CLR-Namespace und den Klassennamen für die Klasse an, die Code-Behind für eine XAML-Seite bereitstellt. Sie müssen über eine solche Klasse verfügen, um Code-Behind nach dem WPF-Programmiermodell zu unterstützen, und daher wird fast immer x: mapped angezeigt, auch wenn keine Ressourcen vorhanden sind.

x: Name: Gibt einen Laufzeitobjektnamen für die Instanz an, die nach der Verarbeitung eines Objektelements im Laufzeitcode vorhanden ist. Im Allgemeinen verwenden Sie häufig eine WPF-definierte äquivalente Eigenschaft für x: Name. Solche Eigenschaften werden speziell einer CLR-Backing-Eigenschaft zugeordnet und sind daher für die Anwendungsprogrammierung, in der Sie häufig Laufzeitcode verwenden, um die benannten Elemente aus dem initialisierten XAML zu finden, bequemer. Die am häufigsten vorkommende Eigenschaft ist FrameworkElement.Name. Sie können weiterhin x: Name verwenden, wenn die entsprechende WPF-Name-Eigenschaft auf Framework-Ebene in einem bestimmten Typ nicht unterstützt wird. Dies tritt in bestimmten Animationsszenarien auf.

x: Static: Aktiviert einen Verweis, der einen statischen Wert zurückgibt, der ansonsten keine XAML-kompatible Eigenschaft ist.

x: Typ: Konstruiert eine Typreferenz basierend auf einem Typnamen. Dies wird zum Angeben von Attributen verwendet, die Typ annehmen, z. B. Style.TargetType, obwohl die Eigenschaft häufig eine native String-Typ-Konvertierung aufweist, sodass die Verwendung der x: Type-Markuperweiterung optional ist.

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