J'ai un contrôle dans WPF qui a un Uid unique. Comment puis-je récupérer l'objet par son Uid?Obtenir l'objet par son UID dans WPF
Répondre
Vous avez à peu près à le faire par force brute. Voici une méthode d'extension d'aide, vous pouvez utiliser:
private static UIElement FindUid(this DependencyObject parent, string uid)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
if (count == 0) return null;
for (int i = 0; i < count; i++)
{
var el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el == null) continue;
if (el.Uid == uid) return el;
el = el.FindUid(uid);
if (el != null) return el;
}
return null;
}
Ensuite, vous pouvez l'appeler comme ceci:
var el = FindUid("someUid");
Est-ce que 'GetChild (parent, N)' n'a pas la complexité de O (N)? L'approche foreach semble plus propre (et plus claire) pour moi. – AgentFire
Cela vaut mieux.
public static UIElement FindUid(this DependencyObject parent, string uid) {
int count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++) {
UIElement el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el != null) {
if (el.Uid == uid) { return el; }
el = el.FindUid(uid);
}
}
return null;
}
Il ne peut pas être mieux si votre code ne fonctionne pas. Votre récursivité est cassée. Le résultat de 'el.FindUid (uid)', sinon null, doit être retourné. –
public static UIElement GetByUid(DependencyObject rootElement, string uid)
{
foreach (UIElement element in LogicalTreeHelper.GetChildren(rootElement).OfType<UIElement>())
{
if (element.Uid == uid)
return element;
UIElement resultChildren = GetByUid(element, uid);
if (resultChildren != null)
return resultChildren;
}
return null;
}
Une question que j'avais la réponse est supérieure qu'il ne sera pas regarder à l'intérieur des contrôles de contenu (tels que les contrôles utilisateur) pour les éléments dans leur contenu. Afin de rechercher à l'intérieur de ceux-ci j'ai étendu la fonction pour regarder la propriété de contenu des contrôles compatibles.
public static UIElement FindUid(this DependencyObject parent, string uid)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
var el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el == null) continue;
if (el.Uid == uid) return el;
el = el.FindUid(uid);
if (el != null) return el;
}
if (parent is ContentControl)
{
UIElement content = (parent as ContentControl).Content as UIElement;
if (content != null)
{
if (content.Uid == uid) return content;
var el = content.FindUid(uid);
if (el != null) return el;
}
}
return null;
}
- 1. Comment obtenir un «uid» unique?
- 2. obtenir la fanpage facebook uid
- 3. Android UID vs iPhone UID
- 4. Affichage d'une fenêtre WPF par son nom
- 5. Erreur d'obtention UID du périphérique par défaut: '! Obj'
- 6. Obtenir une définition de la colonne par son nom dans WPF
- 7. Comment obtenir la variable locale par son nom dans JS?
- 8. Comment obtenir un élément par son href dans jquery?
- 9. Comment obtenir un DependencyProperty par son nom dans Silverlight?
- 10. obtenir par son nom par le sélénium IDE
- 11. emailing url avec uid
- 12. Obtenez Facebook UID avec Ruby
- 13. Obtenir Blackberry UID ou informations spécifiques à l'appareil
- 14. Lire un fichier son dans l'application WPF
- 15. Comment obtenir une connexion ODBC par son nom?
- 16. Comment obtenir le nom de fichier par son identifiant unique?
- 17. Obtenir FullPath dans WPF treeview?
- 18. Type de données UID personnalisé pour CoreData
- 19. Trouver un ID de processus par son nom
- 20. WPF: Développez TextBox par largeur disponible mais PAS par son contenu?
- 21. UID pour les objets de données dans MySQL
- 22. Comment obtenir un UID spécifique à un périphérique en utilisant Python dans ASE sur Android?
- 23. comment obtenir UID Audio Device pour passer dans le setPlaybackDeviceIdentifier de NSSound:
- 24. WPF - Obtenir PropertyName dans IValueConverter
- 25. Existe-t-il un moyen de référencer l'enfant d'un élément d'interface utilisateur WPF par son nom?
- 26. Combobox et son problème d'affichage d'élément wpf
- 27. Animation WPF/XAML avec son propre événement
- 28. WPF: obtenir le type de code-behind classe par ElementName
- 29. Impossible de définir une propriété après son animation dans WPF
- 30. Appel d'API Facebook avec email pour renvoyer UID
Veuillez préciser. Quel est votre UID? Comment est-il défini? –
C'est une propriété de dépendance de n'importe quel contrôle dans wpf ou silverlight .. j'ai réussi à résoudre ceci, mais je me demandais s'il existe une méthode intégrée. – jose