2009-09-25 6 views
0

J'ai besoin d'un moyen de lister tous les contrôles nommés dans une application wpf.Wpf: Liste tous les noms de contrôle dans une application

En C++, nous pourrions utiliser le fichier de ressources pour voir une liste de tous les contrôles sur un formulaire (ou du moins c'est ce qu'on m'a dit). J'ai besoin d'un moyen similaire pour voir la liste des contrôles dans une application wpf. Les noms seront utilisés dans une base de données, donc peu importe comment je les obtiens, j'ai juste besoin de les automatiser pour que je ne les rate pas ou n'en fasse pas d'erreur.

Est-ce que quelqu'un a des idées sur la façon de faire cela? Pourrait-il y avoir un outil quelque part qui pourrait lire les fichiers xaml et choisir les noms?

Répondre

0

Quelqu'un m'a envoyé plus tôt:

Vous pouvez utiliser LogicalTreeHelper (ou VisualTreeHelper) à récursif à travers les arbres WPF et trouver les commandes qui vous intéressent

Je ne sais pas si vous êtes. en utilisant une fenêtre ou un projet ASP.net, mais c'est pour le projet de formulaire wpf.

1

Les fichiers xaml sont au format xml. Vous pouvez utiliser n'importe quel analyseur XML pour analyser le fichier xaml. Vous remarquerez peut-être que toutes les parties d'un fichier xaml ne sont pas des contrôles (éléments) et que les contrôles n'ont pas besoin d'avoir un nom spécifié pour fonctionner. Si vous voulez le faire fonctionner, vous pouvez utiliser le LogicalTreeHelper ou VisualTreeHelper comme déjà suggéré.

3

Cela vous aidera à:

private void ProcessLogicalTree(object current) 
{ 
    string elementInfo = current.GetType().Name; 

    if (current is FrameworkElement) 
    { 
     elementInfo += " - Name: " + (current as FrameworkElement).Name; 
    } 

    MessageBox.Show(elementInfo); 

    DependencyObject dependencyObject = current as DependencyObject; 

    if (dependencyObject != null) 
    { 
     foreach (object child in LogicalTreeHelper.GetChildren(dependencyObject)) 
     { 
      ProcessLogicalTree(child); 
     } 
    } 
} 

Et voici comment vous l'utilisez:

ProcessLogicalTree(this); // Where 'this' is your Window or your UserControl 

Préférable sur l'événement Loaded ou lors d'un événement Button_Click.

+0

C'est une excellente réponse et c'est exactement ce que je recherche. Je vous remercie. – MikeMalter

Questions connexes