Architettura degli strumenti
Gli utenti interagiscono con il contenuto di una finestra di progettazione in varie modalità complesse. Ad esempio, gli utenti potrebbero interagire con l'area di progettazione tramite clic, trascinamento, trascinamento con tasti di modifica, da tastiera o tramite menu. Perché sia estendibile, una finestra di progettazione deve supportare la gestione di tutti questi tipi di interazione dell'utente. WPF Designer per Visual Studio fornisce un sistema di input flessibile ma strutturato che sia estendibile e coerente. Il modello dell'utente per l'architettura degli strumenti è costituito da comandi, attività e strumenti.
Comandi
Un comando è un identificatore univoco che rappresenta alcuni comportamenti. Un esempio è il comando Taglia che identifica il processo di ritaglio di testo o di un oggetto e la relativa aggiunta agli Appunti. Mentre il codice che implementa il comando potrebbe essere diverso da applicazione ad applicazione o anche all'interno di una stessa applicazione, il comando rimane costante. Tutti i comandi implementano l'interfaccia ICommand
In aggiunta al comando stesso, altri due requisiti sono necessari per il funzionamento del comando: innanzitutto, è necessario un input dell'utente (denominato azione) che attivi il comando. Ad esempio, la combinazione di tasti di scelta rapida CTRL+X o la selezione da un menu potrebbe essere un'azione che attiva un comando. Secondo, un comando richiede un'implementazione del codice eseguito quando il comando viene richiamato.
WPF fornisce un'implementazione incorporata dell'interfaccia ICommand denominata RoutedCommand che passa informazioni sull'input dell'utente ai gestori dei comandi designati. WPF Designer fornisce un altro tipo di comando denominato ToolCommand che espande la quantità di informazioni sullo stato della finestra di progettazione passate al tipo EventArgs del gestore dei comandi.
Attività
Task è un oggetto che rappresenta un'attività effettiva che potrebbe verificarsi nella finestra di progettazione. Ad esempio, il trascinamento di un elemento sulla finestra di progettazione potrebbe essere rappresentato da un oggetto Task. Un oggetto Task comprende tre insiemi:
Un insieme di associazioni di input che descrivono i tipi di input dell'utente gestiti dall'attività. Ad esempio, associazioni che rappresentano combinazioni di tasti di scelta rapida o movimenti del mouse.
Un insieme di associazioni di comandi che forniscono le implementazioni per comandi standard indirizzati WPF.
Un insieme di associazioni di comandi di strumenti che forniscono l'implementazione per i comandi di strumenti di WPF Designer.
Ad esempio, l'oggetto Task menzionato in precedenza che rappresenta il trascinamento di un elemento sulla finestra di progettazione potrebbe contenere comandi che rappresentano il clic, il rilascio e lo spostamento del mouse. L'oggetto Task potrebbe contenere anche associazioni di input che associano movimenti di input per ognuno di tali comandi.
Strumenti
Tool è una classe utilizzata per elaborare gli input dell'utente. Ogni input dell'utente viene immesso nella finestra di progettazione come uno o più eventi di input, portando dati che rappresentano l'azione degli input utilizzati e altre informazioni sullo stato della finestra di progettazione. L'evento di input è indirizzato all'oggetto Tool correntemente attivo che converte i dati di input in associazioni di input. Se per l'azione di input indicato viene individuata un'associazione, il comando all'interno dell'associazione viene eseguito.
L'oggetto Tool viene utilizzato per rappresentare la modalità globale della finestra di progettazione. Ad esempio, se l'utente sta selezionando componenti nell'area di progettazione, tale modalità viene abilitata perché lo strumento corrente offre attività che forniscono insiemi di associazioni di input e comandi che associano particolari movimenti di input a particolari comandi che consentono tali attività. Se l'utente sta creando un controllo nuovo, lo strumento attivo risulta diverso e offre un insieme diverso di associazioni che possono consentire all'utente di utilizzare gli stessi movimenti, ma li associa a comandi diversi.