2010-12-13 10 views
45

Was ist der Unterschied zwischen x:Key und x:Name in WPF?Was ist der Unterschied zwischen x: Schlüssel und x: Name in WPF?

Ich bin mir nicht sicher, was der wahre Unterschied ist.

+1

@Alastair, die Frage, die Sie als möglicher Täter aufgelistet haben, steht in keinem Zusammenhang damit. – Josh

+1

Wie ist es ein Duplikat? Die andere Frage bezieht sich auf 'Name' vs' Type'. Diese Frage bezieht sich auf 'Schlüssel' vs.' Name'. – jalf

+0

Mein Fehler, ich habe die "mögliche Betrogene" -Frage falsch gelesen. Entschuldigung. –

Antwort

43

Obwohl sie für ähnliche Zwecke verwendet werden, sind sie nicht austauschbar. x: Schlüssel wird für Elemente verwendet, die einem Wörterbuch als Werte hinzugefügt werden, am häufigsten für Stile und andere Ressourcen, die einem ResourceDictionary hinzugefügt werden. Beim Festlegen des x: Key-Attributs ist tatsächlich keine entsprechende Eigenschaft für das Objekt oder sogar eine angefügte Abhängigkeitseigenschaft festgelegt. Es wird einfach vom XAML-Prozessor verwendet, um zu wissen, welcher Schlüssel beim Aufrufen von Dictionary.Add verwendet werden soll.

x: Name ist ein bisschen komplizierter. Es wird verwendet, um einen assoziierten Namen auf ein Objekt (in der Regel ein von FrameworkElement abgeleitetes Objekt) innerhalb des Bereichs eines übergeordneten Elements anzuwenden. Dieser Bereich wird als "Namescope" bezeichnet, und die einfachste Möglichkeit ist, sich ein UserControl vorzustellen, das eine <TextBox x:Name="foo" /> enthält.

Sie könnten dann mehrere Instanzen des UserControls in ein Fenster einfügen, ohne dass der Name "foo" kollidiert, weil jedes UserControl seinen eigenen Namescope hat.

Es ist erwähnenswert, dass FrameworkElement eine Abhängigkeitseigenschaft mit dem Namen Name definiert, die der Einstellung von x: Name entspricht.

Der andere Unterschied besteht darin, dass der XAML-Designer Member im Code-Behind für Elemente mit einem x: Name erstellt. Dies gilt nicht für Objekte, die mit x: Key einem Wörterbuch hinzugefügt werden.

Weitere Informationen hierzu finden Sie im Abschnitt Anmerkungen der MSDN-Dokumentation für the x:Name directive.

20

x: Der Schlüssel ist nur im Rahmen eines ResourceDictionary-Elements gültig. x: Key wird als primärer Bezeichner für Elemente im ResourceDictionary verwendet.

Auf der anderen Seite ist x: Name im Bereich von alles außer einem ResourceDictionary gültig. x: Der Schlüssel ist außerhalb des ResourceDictionary-Bereichs nicht gültig.

Verwandte Themen