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.

image

Le operazioni da eseguire sono:
    

  1. Allo statup registrare l'evento Click della classe Button usando EventManager.RegisterClassHandler
  2.   public partial class App : Application
      {
         protected override void OnStartup (StartupEventArgs e)
         {        
            base.OnStartup(e);
            EventManager.RegisterClassHandler(typeof(Button), 
                                                         Button.ClickEvent, 
                                                         new RoutedEventHandler(OnButtonPressed),true);
         }
      }
  3. Definire il gestore OnButtonPressed
  4. 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.

     

    Technorati Tags: ,