Est-il un identifiant unique pour wpf UIElement?
Pour l'enregistrement des actions de l'utilisateur dans mon WPF formes, j'ai ajouté quelques globale des gestionnaires d'événements
Je veux ouvrir une session exactement qui contrôle le feu de l'événement, est-il un identifiant unique pour un wpf UIElement
comme ClientId dans ASP.Net?
- Avez-vous essayé le FrameworkElement.Nom de la propriété?
- Oui Dimitri, mais le Nom peut être vide, je ne veux pas mettre de Nom sur chaque contrôle exclusivement à des fins de journalisation
- le PersistId la propriété semble être ce que vous cherchez. Hélas, il est maintenant obsolète et n'a apparemment pas de remplacement. Peut-être que vous pouvez tomber en arrière pour générer des identifiants uniques vous-même, dans ce cas, voir la cette question.
- assurer la génération de l'id de moi-même est une bonne idée, mais dans le post, vous mentoined l'identifiant sera changé après l'application de la re-départ...qui fera journal inutilisable, et je ne pense pas qu'il y est de toute façon de produire de l'identifiant stable
- Ma compréhension est la façon XAML construit une page qu'il n'a pas besoin d'un identifiant unique pour un élément de l'INTERFACE utilisateur. En l'absence de l'attribution d'un identifiant unique, je ne pense pas que vous allez en trouver un. GetHashCode pourrait fonctionner.
Vous devez vous connecter pour publier un commentaire.
Pourquoi n'utilisez-vous pas le Code de Hachage.
Vous pouvez comparer les valeurs pour s'assurer qu'ils sont le même objet, et son facile à obtenir avec
.GetHashCode()
Modifier
Évidemment c'est différent à chaque fois que vous exécutez le programme, donc en fait c'est pro une mauvaise idée, sauf si vous voulez mettre à jour le journal chaque fois que le processus est connecté. Possible cependant
Je veux dire que vous pourrait stocker une valeur de hachage pour chaque objet au moment où le journal est créé, mais je ne sais pas si j'aime ça
Semble que j'ai trouvé réponse à ma question, la réponse est Non, maintenant à la façon de le faire, Comme indiqué dans MSDN ici (http://msdn.microsoft.com/en-us/magazine/dd483216.aspx)
Une façon que vous pouvez faire, c'est avec un attribut personnalisé. Comme si...
La
UIElement
vous souhaitez vous connecter (UserControl par exemple):Alors vous avez besoin de la classe attribut personnalisé
Maintenant dans votre code, vous pouvez faire quelque chose comme ceci:
Parce que vous êtes l'étiquetage de la commande avec un attribut dans le code, l'identificateur unique ne change jamais, peu importe combien de fois vous tuer /lancement de l'application.
Bien sûr c'est un exemple simple qui montre comment accéder à l'ID, mais vous aurez probablement envie d'utiliser un certain type de Programmation Orientée Aspects. Je fais exactement ce genre de chose à l'aide de Château de Windsor Intercepteurs, mais qui est hors de la portée de ce post.
Idéalement, vous serez en accédant à ce ID quand il y a une sorte d'événement qui est exclu. À l'aide de séparateurs permet d'aller capturer les appels de méthode avant qu'ils sont invoqués dans lequel vous pouvez rechercher le code comme indiqué ci-dessus et du journal de l'action. Alternativement, vous pouvez simplement utiliser
dans un peu de méthode, lorsqu'un événement est déclenché sur le contrôle et l'intégration de votre code d'enregistrement de là. Ce modèle n'est pas le meilleur parce que vous êtes à l'aspersion transversale concerne tous les plus de faire un peu de type de la Programmation Orientée Aspects de l'approche mieux...mais encore une fois je m'égare et il est hors de la portée de ce post...mais vous voyez l'idée.
Espère que cette aide.
Vous êtes simplement à la recherche à l'ajout d'une
Name
oux:Name
de sorte que leWindow
/UserControl
/Page
expose le contrôle pour le reste de la classe avec le nom spécifié.Aussi, vous pouvez toujours utiliser le FrameworkElement.Tag objet. Il est destiné à stocker arbitraire de l'information, de sorte que vous pouvez l'utiliser comme un identifiant unique si vous le souhaitez.
Je crois, pour l'enregistrement des actions de l'utilisateur, vous pouvez utiliser le UIAutomation arbre et la AutomationElement.AutomationId bien, parce que cette approche est pris en charge dans tous les contrôles de l'INTERFACE utilisateur par défaut. De nombreux contrôles tiers sont prend également en charge la AutomationId de leurs éléments (par exemple les cellules de la grille). Un AutomationId est utile pour la création de tester des scripts d'automatisation.