Immaginate di avere la necessità di eseguire un operazione ogni volta che l'utente preme un qualsiasi pulsante all'interno di un applicazione.
Far questo in un applicazione Windows Form non è sicuramente banale, in WPF lo stesso risultato si può ottenere abbastanza facilmente grazie alla possibilità di sottoscrivere uno o più eventi esposti da una classe indipendentemente da dove venga poi utilizzata la relativa istanza.
Immaginiamo di avere due window, ognuna con un pulsante e di voler loggare quando questi vengono premuti.
Le operazioni da eseguire sono:
- Allo statup registrare l'evento Click della classe Button usando EventManager.RegisterClassHandler
public partial class App : Application
{
protected override void OnStartup (StartupEventArgs e)
{
base.OnStartup(e);
EventManager.RegisterClassHandler(typeof(Button),
Button.ClickEvent,
new RoutedEventHandler(OnButtonPressed),true);
}
}
- Definire il gestore OnButtonPressed
private void OnButtonPressed (object sender, RoutedEventArgs e)
{
Button buttonSource = e.OriginalSource as Button;
string msg = string.Format("'{0}' has been pressed...",buttonSource.Name);
Console.WriteLine(msg);
}
Fatto questo ad ogni pressione di pulsante in qualsiasi punto dell'applicazione corrisponderà l'esecuzione di OnButtonPressed.