x: Nome e Nome fanno riferimento a diversi spazi dei nomi.
x: nome è un riferimento allo spazio dei nomi x definito per impostazione predefinita nella parte superiore del file Xaml.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Basta dire Nome utilizza il valore predefinito di sotto dello spazio dei nomi.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x: Name sta dicendo utilizzare lo spazio dei nomi che ha l'alias x. x è il valore predefinito e la maggior parte delle persone lasciano, ma si può cambiare a tutto ciò che ti piace
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
in modo che il riferimento sarebbe foo: nome
Define and Use Namespaces in WPF
EDIT:
OK consente di guardare questo in un modo diverso. Supponi di trascinare un pulsante sulla tua pagina Xaml. È possibile fare riferimento a questo 2 modi x: nome e nome. Tutti xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"e xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" sono riferimenti a più domini. Dal momento che XAML detiene il controllo namespace (non al 100% su questo) e presentazione detiene il FrameworkElement e la classe pulsante ha un modello di ereditarietà di:
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
Così come ci si aspetterebbe tutto ciò che eredita da FrameworkElement avrebbe accesso a tutti i suoi attributi pubblici. quindi nel caso di Button ottiene l'attributo Name da FrameworkElement, nella parte superiore dell'albero gerarchico. Quindi è possibile dire x: Nome o Nome e entrambi accederanno al getter/setter da FrameworkElement.
MSDN Reference
WPF definisce un attributo CLR che viene consumata dai processori XAML al fine di mappare più spazi dei nomi CLR a un unico namespace XML. L'attributo XmlnsDefinitionAttribute viene inserito a livello di assembly nel codice sorgente che produce l'assembly. Il codice sorgente dell'assembly WPF utilizza questo attributo per mappare i vari spazi dei nomi comuni, come System.Windows e System.Windows.Controls, allo spazio dei nomi http://schemas.microsoft.com/winfx/2006/xaml/presentation.
Così gli attributi di assemblaggio avranno un aspetto simile:
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")]
Le risposte suggeriscono che l'uso di 'x: Name' tutto il tempo funziona correttamente. Ho appena dovuto cambiarlo in 'Name' altrimenti non potrei fare riferimento al controllo nel mio codice .xaml.cs, quindi presumo che non funzioni più tutto il tempo. – Ortund