x: Name und Name verweisen auf unterschiedliche Namespaces.
x: name ist ein Verweis auf den x-Namespace, der standardmäßig oben in der Xaml-Datei definiert ist.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Wenn Sie nur Name sagen, wird der unten stehende Standard-Namespace verwendet.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x: Name sagt, benutze den Namespace, der den x- Alias hat. x ist die Standardeinstellung und die meisten Leute verlassen sie, aber Sie können sie nach Belieben ändern
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
Ihre Referenz wäre also foo: name
Definieren und Verwenden von Namespaces in WPF
OK, sehen wir uns das anders an. Angenommen, Sie ziehen eine Schaltfläche per Drag & Drop auf Ihre Xaml-Seite. Sie können auf zwei Arten auf x verweisen : Name und Name . Alle xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" und
xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" verweisen auf mehrere Namespaces . Da xaml den Control- Namespace enthält (nicht 100%) und die Präsentation das FrameworkElement AND enthält, hat die Button-Klasse ein Vererbungsmuster von:
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
Wie zu erwarten wäre, hätte alles, was von FrameworkElement erbt, Zugriff auf alle öffentlichen Attribute. Im Fall von Button wird das Attribut Name von FrameworkElement ganz oben im Hierarchiebaum abgerufen. So kann man sagen , x: Name oder Namen , und sie werden sowohl die Getter / Setter vom Framework zugreifen.
MSDN-Referenz
WPF definiert ein CLR-Attribut, das von XAML-Prozessoren verwendet wird, um mehrere CLR-Namespaces einem einzelnen XML-Namespace zuzuordnen. Das XmlnsDefinitionAttribute- Attribut wird auf Assemblyebene im Quellcode platziert, der die Assembly erstellt. Der Quellcode der WPF-Assembly verwendet dieses Attribut, um die verschiedenen allgemeinen Namespaces wie System.Windows und System.Windows.Controls dem Namespace http://schemas.microsoft.com/winfx/2006/xaml/presentation zuzuordnen.
Die Assembly-Attribute sehen also ungefähr 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")]
x:Name
einwandfrei funktioniert. Ich musste es nur ändern,Name
sonst konnte ich das Steuerelement in meinem .xaml.cs-Code nicht referenzieren, daher gehe ich davon aus, dass es nicht mehr immer funktioniert.