Architecture des outils
Les utilisateurs interagissent avec le contenu sur un concepteur de diverses manières complexes. Par exemple, les utilisateurs peuvent interagir avec l'aire de conception en cliquant, en faisant glisser des éléments, en les faisant glisser avec des touches de modification, en utilisant le clavier ou les menus. Pour être extensible, un concepteur doit fournir une base de gestion pour tous ces types d'interactions utilisateur. Le Concepteur WPF pour Visual Studio fournit un système d'entrée flexible mais structuré, à la fois extensible et cohérent. Le modèle utilisateur d'architecture d'outils se compose de commandes, de tâches et d'outils.
Commandes
Une commande est un identificateur unique correspondant à un certain comportement. Par exemple, la commande Couper identifie le processus consistant à couper du texte ou un objet pour l'ajouter au Presse-papiers. Bien que le code qui implémente la commande puisse être différent d'une application à l'autre, voire dans une même application, la commande demeure constante. Toutes les commandes implémentent l'interface ICommand.
Outre la commande elle-même, deux autres éléments sont nécessaires au bon fonctionnement d'une commande. En premier lieu, une commande requiert un certain type d'entrée d'utilisateur (appelé mouvement) qui déclenche la commande. Par exemple, la combinaison de touches CTRL+X ou la sélection dans un menu sont des mouvements susceptibles de déclencher une commande. En second lieu, une commande requiert un certain type d'implémentation de code qui est exécuté lorsque la commande est appelée.
WPF fournit une implémentation intégrée de l'interface ICommand appelée RoutedCommand, qui passe les informations sur l'entrée d'utilisateur aux gestionnaires de commandes désignés. Concepteur WPF fournit un autre type de commande appelé ToolCommand, qui développe le volume d'informations sur l'état du concepteur qui sont passées au type EventArgs du gestionnaire de commandes.
Tâches
Task est un objet qui représente une tâche réelle qui peut se produire dans le concepteur. Par exemple, faire glisser un élément sur le concepteur peut être représenté par un objet Task. Task contient trois collections :
Une collection de liaisons d'entrée qui décrivent les types d'entrée d'utilisateur gérés par la tâche. Par exemple, des liaisons représentant des combinaisons de touches ou des mouvements de souris.
Une collection de liaisons de commande qui fournissent des implémentations pour les commandes routées WPF standard.
Une collection de liaisons de commande d'outil qui fournissent une implémentation pour les commandes des outils Concepteur WPF.
Par exemple, l'objet Task mentionné précédemment qui correspond à l'action de faire glisser un élément sur le concepteur peut contenir des commandes correspondant au déplacement de la souris, au déplacement de la souris vers le bas et au déplacement de la souris vers le haut. L'objet Task peut également contenir des liaisons d'entrée qui lient les mouvements d'entrée à chacune de ces commandes.
Outils
Tool est une classe utilisée pour traiter l'entrée d'utilisateur. Toute entrée d'utilisateur produit dans le concepteur un ou plusieurs événements d'entrée, transportant des données qui représentent le mouvement d'entrée utilisé et d'autres informations sur l'état du concepteur. L'événement d'entrée est routé vers l'objet Tool actif, qui convertit les données d'entrée en liaisons d'entrée. Si une liaison est trouvée pour le mouvement d'entrée indiqué, la commande incluse dans la liaison est exécutée.
L'objet Tool est utilisé pour représenter le mode global du concepteur. Par exemple, si l'utilisateur sélectionne des composants sur l'aire de conception, ce mode est activé parce que l'outil actuel offre des tâches qui fournissent les collections de liaisons et de commandes d'entrée qui lient les mouvements d'entrée particuliers aux commandes particulières qui activent ces tâches. Si l'utilisateur créait un nouveau contrôle, l'outil actif serait différent et offrirait un jeu différent de liaisons qui pourraient permettre à l'utilisateur d'utiliser les mêmes mouvements, mais les lieraient à des commandes différentes.