X:Name und Name verweisen auf unterschiedliche Namensräume.
x:name ist ein Verweis auf den x-Namespace, der standardmäßig am Anfang der Xaml-Datei definiert ist.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Ich sage nur Name verwendet den Standard-Namensraum unten.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Name besagt, dass der Namespace verwendet werden soll, in dem die x alias. x ist der Standardwert, den die meisten Leute beibehalten, aber Sie können ihn nach Belieben ändern
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
Ihre Referenz wäre also foo:name
Definieren und Verwenden von Namensräumen in WPF
OK, betrachten wir das Ganze einmal anders. Nehmen wir an, Sie ziehen eine Schaltfläche per Drag & Drop auf Ihre Xaml-Seite. Sie können dies auf 2 Arten referenzieren x:name y Name . Alle xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" et xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" sind Verweise auf mehrere Namespaces. Da xaml hält die Kontrolle Namespace (nicht 100%ig sicher) und Präsentation hält die FrameworkElement UND die Button-Klasse hat ein Vererbungsmuster von:
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
Wie nicht anders zu erwarten, hat alles, was von FrameworkElement erbt, Zugriff auf alle seine öffentlichen Attribute. Im Fall von Button erhält es also sein Attribut Name von FrameworkElement, ganz oben im Hierarchiebaum. Also können Sie sagen x:Name o Name und beide werden auf die Getter/Setter des FrameworkElements zugreifen.
MSDN-Referenz
WPF definiert ein CLR-Attribut, das von XAML-Prozessoren verwendet wird, um mehrere CLR-Namespaces auf einen einzigen XML-Namespace abzubilden. Die XmlnsDefinitionAttribut Attribut wird auf der Ebene der Baugruppe im Quellcode platziert, der die Baugruppe erzeugt. Der WPF-Assembly-Quellcode verwendet dieses Attribut, um die verschiedenen gemeinsamen Namespaces, wie System.Windows und System.Windows.Controls, auf den http://schemas.microsoft.com/winfx/2006/xaml/presentation Namensraum.
Die Attribute der Baugruppe sehen dann etwa so aus:
PresentationFramework.dll - XmlnsDefinitionAttribute:
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Data")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Navigation")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shapes")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Documents")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")]
1 Stimmen
Die Antworten legen nahe, dass die Verwendung
x:Name
funktioniert die ganze Zeit über gut. Ich musste es nur ändern inName
Andernfalls konnte ich das Steuerelement in meinem .xaml.cs-Code nicht referenzieren, also gehe ich davon aus, dass es nicht mehr der Fall ist, dass es die ganze Zeit gut funktioniert.