6
votes

Y a-t-il une différence dans X: nom et nom pour les contrôles dans le fichier XAML?

Je suis nouveau dans Silverlight.
Lorsque j'ajoute un certain contrôle à mon fichier XAML avec Visual Studio Il définit le nom de contrôle avec la propriété Nom, mais il y a aussi x: nom.
Y a-t-il une différence et quand utiliser chacun d'eux?
Merci.


2 commentaires

en double possible de dans WPF, qu'est-ce que sont les différences entre les attributs x: nom et nom de nom?


Très proche, mais celui-ci était pour Silverlight, pas sûr qu'il soit important après 4 ans :)


3 Réponses :


2
votes

Non, vous ne pouvez tout simplement pas les utiliser tous les deux. X: Nom est ce que le préprocesseur XAML utilise et nommer réellement une propriété de convance fournie sur la classe Frameworment pour la définir.

du Référence MSDN : < / p>

Si le nom est disponible en tant que propriété sur un élément, nom et x: nom peut être utilisé de manière interchangeable, mais un résultat d'erreur si les deux attributs sont spécifiés sur le même élément.


0 commentaires

13
votes

en bref

oui il y a une différence. La première ligne est que x: nom peut être utilisé sur des éléments d'objet qui n'ont pas nom propriétés de leur propre.

plus long Explication

Vous ne pouvez utiliser que le nom sur un élément qui représente un objet qui dispose d'un nom nom . Par exemple, tout ce qui provient de FramewradeMement .

L'attribut x: nom peut être placé sur n'importe quel élément qui représente un objet peu importe de savoir si cet objet dispose d'une propriété nom . Si l'objet a une propriété nom , la valeur de x: nom sera attribuée à celle que vous ne pouvez pas avoir à la fois x: nom et nom sur le même élément.

Lorsqu'un objet a un nom nom Propriété ou un x: nom Propriété La valeur de cette propriété est associée à l'entrée d'objets dans l'arborescence d'objets. C'est via l'arborescence d'objets que le FindName méthode d'un FrameworkElement peut trouver un objet. FINDNAME peut trouver des objets par nom même si cet objet ne porte pas un nom propriété de son propre car il utilise le nom enregistré dans l'arborescence d'objets.

Le code Autogenerated pour un USERCONTROL contiendra les définitions de champs pour tout élément qui comporte un nom ou ou x: nom propriété. La méthode initialisecomponent générée utilisera la méthode FindName pour affecter des valeurs à ces champs.

exemple

Le xaml ci-dessus crée deux champs Layoutrooot de type grille et myBrush de type SolidColorBrush . Si vous deviez changer x: nom = "Layouroto" à nom = "Layouroto" qui ne changerait rien. grille a un nom propriété . Toutefois, essayez de changer x: nom = "myBrush" sur nom = "myBrush" . Cela ne fonctionne pas car solidcolorbrush n'a pas de propriété de nom. Avec le XAML ci-dessus, vous pouvez alors faire du code comme celui-ci: - xxx

ouvrir la définition de initializececomponent et examine le code généré automatiquement.


2 commentaires

Donc, nous préférerions utiliser x: nom que nom pour vous assurer que la nommée fonctionne tout le temps et nous nous demandons si le contrôle prend en charge la propriété de nom ou non. Ai-je raison?


@Nam: Oui, j'ai tendance à faire ça, cela aide également les choses à se cohérent.



1
votes

Réponse courte: Si vous écrivez des affaires dans XAML, il est probablement préférable d'utiliser X: Nom systématiquement.

Réponse longue: une réponse précédente mentionnée que le nom est une propriété "Convienience" pour accéder à X: Nom. C'est correct. Toutefois, maintenant que l'environnement des outils pour XAML dans Visual Studio et la série d'expressions a vraiment mûri et que vous voyez de plus en plus XAML généré sur des outils, vous voyez probablement de plus en plus x: nom par opposition au nom. Les outils préfèrent X: Nom Parce qu'ils ne prennent pas une dépendance quelque peu risquée (potentiellement spécifique au cadre) RE: Comment x: nom et nom sont vraiment identiques, et ils n'ont pas besoin de flipflop entre le nom de réglage si quelque chose Il se trouve être un frameworkElement, puis x: Nom sur quelque chose comme un storyboard et générer une dualité si vous deviez regarder cette xaml à travers quelque chose comme un DOM. En d'autres termes, l'attribut "nom" dans XAML est vraiment beaucoup moins "pratique" à utiliser de nos jours que d'avoir été conçu dans la conception de l'API d'origine. Une partie de la "commodité" était de ne pas avoir à mapper x :, mais vous devez le faire de toute façon pour X: classe et à peu près tout le monde est habitué à utiliser X: attributs et les principes généraux du balisage XAML efficacement. < / p>

Je ne suis pas sûr de la déclaration faite par l'affiche originale que VS encourage à l'aide du nom. Oui, nom apparaît comme une option IntelliSense, mais X: Nom. Et tous les cas que je vois dans les modèles où un objet reçoit un nom de départ utilise X: Nom même que la plupart d'entre eux sont des cadres terrestres.


0 commentaires