x: Nome e Nome fanno riferimento a spazi dei nomi diversi.
x: name è 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"
Solo dicendo Name usa il namespace sottostante predefinito.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x: il nome dice usa lo spazio dei nomi che ha l' alias x . x è l'impostazione predefinita e la maggior parte delle persone lo lascia, ma puoi cambiarlo come preferisci
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
quindi il tuo riferimento sarebbe foo: nome
Definisci e usa gli spazi dei nomi in WPF
OK, vediamo questo in un modo diverso. Supponi di trascinare e rilasciare un pulsante sulla tua pagina Xaml. Puoi 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ù spazi dei nomi . Poiché xaml contiene lo spazio dei nomi Control (non al 100% su quello) e la presentazione contiene FrameworkElement AND la classe Button ha un modello di ereditarietà di:
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
Quindi, come ci si aspetterebbe che tutto ciò che eredita da FrameworkElement avrebbe accesso a tutti i suoi attributi pubblici. quindi nel caso di Button sta ottenendo il suo attributo Name da FrameworkElement, nella parte superiore dell'albero della gerarchia. Quindi puoi dire x: Name o Name e entrambi accederanno al getter / setter da FrameworkElement.
Riferimento MSDN
WPF definisce un attributo CLR che viene utilizzato dai processori XAML per mappare più spazi dei nomi CLR su un singolo spazio dei nomi XML. L' attributo XmlnsDefinitionAttribute viene posizionato 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 .
Quindi gli attributi dell'assembly saranno simili a:
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
tutto il tempo funziona bene. Ho appena dovuto cambiarlo inName
altrimenti non potrei fare riferimento al controllo nel mio codice .xaml.cs, quindi suppongo che non è più il caso che funzioni sempre bene.