X:Name et Name font référence à des espaces de noms différents.
x:nom est une référence à l'espace de nom x défini par défaut en haut du fichier Xaml.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Je dis juste Nom utilise l'espace de nom par défaut ci-dessous.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Nom est de dire d'utiliser l'espace de nom qui a le x alias. x est la valeur par défaut et la plupart des gens la laissent, mais vous pouvez la changer en ce que vous voulez.
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
donc votre référence serait foo:nom
Définir et utiliser les espaces de noms dans WPF
Voyons cela sous un autre angle. Disons que vous faites glisser et déposez un bouton sur votre page Xaml. Vous pouvez le référencer de 2 façons x:nom et nom . Tous les sites xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" et xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" sont des références à plusieurs espaces de noms. Puisque xaml détient le Contrôle (pas à 100%) et présentation détient le Élément-cadre ET le Classe de boutons a un modèle d'héritage de :
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
Donc, comme on peut s'y attendre, tout ce qui hérite de FrameworkElement a accès à tous ses attributs publics. Ainsi, dans le cas du bouton, l'attribut Name provient de FrameworkElement, tout en haut de l'arbre hiérarchique. Alors vous pouvez dire x:Nom ou Nom et ils accéderont tous deux au getter/setter de l'élément FrameworkElement.
Référence MSDN
WPF définit un attribut CLR qui est utilisé par les processeurs XAML afin de faire correspondre plusieurs espaces de noms CLR à un seul espace de noms XML. Le site XmlnsDefinitionAttribute est placé au niveau de l'assemblage dans le code source qui produit l'assemblage. Le code source de l'assemblage WPF utilise cet attribut pour faire correspondre les divers espaces de noms communs, tels que System.Windows et System.Windows.Controls, à l'espace de noms de l'assemblage WPF. http://schemas.microsoft.com/winfx/2006/xaml/presentation espace de noms.
Ainsi, les attributs de l'assemblage ressembleront à quelque chose comme :
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")]
2 votes
Les réponses suggèrent que l'utilisation de
x:Name
tout le temps fonctionne bien. J'ai juste dû le changer pourName
Sinon, je n'ai pas pu faire référence au contrôle dans mon code .xaml.cs. Je vais donc supposer que ce n'est plus le cas et qu'il fonctionne bien tout le temps.