x: Nombre y Nombre hacen referencia a diferentes espacios de nombres.
x: name es una referencia al espacio de nombres x definido por defecto en la parte superior del archivo Xaml.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Solo decir que Nombre usa el espacio de nombres predeterminado debajo.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x: Nombre dice usar el espacio de nombres que tiene el alias x . x es el valor predeterminado y la mayoría de las personas lo dejan, pero puedes cambiarlo a lo que quieras
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
entonces su referencia sería foo: nombre
Definir y usar espacios de nombres en WPF
OK, veamos esto de una manera diferente. Supongamos que arrastra y suelta un botón en su página Xaml. Puede hacer referencia a esto de 2 maneras x: nombre y nombre . Todos xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" y
xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" son referencias a múltiples espacios de nombres . Dado que xaml contiene el espacio de nombres Control (no 100% en eso) y la presentación contiene el FrameworkElement AND, la clase Button tiene un patrón de herencia de:
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
Entonces, como era de esperar, cualquier cosa que herede de FrameworkElement tendría acceso a todos sus atributos públicos. entonces, en el caso de Button, obtiene su atributo Name de FrameworkElement, en la parte superior del árbol de jerarquía. Entonces puede decir x: Name o Name y ambos accederán al getter / setter desde FrameworkElement.
Referencia de MSDN
WPF define un atributo CLR que consumen los procesadores XAML para asignar múltiples espacios de nombres CLR a un solo espacio de nombres XML. El atributo XmlnsDefinitionAttribute se coloca en el nivel de ensamblado en el código fuente que produce el ensamblaje. El código fuente del ensamblado WPF usa este atributo para asignar los diversos espacios de nombres comunes, como System.Windows y System.Windows.Controls, al http://schemas.microsoft.com/winfx/2006/xaml/presentation namespace.
Entonces los atributos de ensamblaje se verán así:
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
todo el tiempo funciona bien. Simplemente tuve que cambiarlo, de loName
contrario no podría hacer referencia al control en mi código .xaml.cs, así que voy a suponer que ya no es el caso de que funcione bien todo el tiempo.