Como utilizar LINQ para levantar un handler para varios controles.

Cuantas veces no hemos escrito “n” líneas de código solo  para dar a distintos controles una tarea en específico sin saber que tal vez se pueda hacer en una. Bueno… no prometo nada pero aquí propongo un ejemplo de como podríamos solucionar (o mejor dicho, eficientizar este proceso) este problema. Supongamos que tenemos 3 botones en nuestro LayoutRoot en nuestro control de inicio, algo así: <Grid x:Name="LayoutRoot" Background="White">         <Grid.ColumnDefinitions>             <ColumnDefinition/>             <ColumnDefinition/>         </Grid.ColumnDefinitions>         <Grid.RowDefinitions>             <RowDefinition/>             <RowDefinition/>         </Grid.RowDefinitions>         <Button x:Name="btn1" Width="100" Height="25" Content="Botón 1"                VerticalAlignment="Center" HorizontalAlignment="Center"/>         <Button x:Name="btn2" Width="100" Height="25" Content="Botón 2" Grid.Column="1"                VerticalAlignment="Center" HorizontalAlignment="Center"/>         <Button x:Name="btn3" Width="100" Height="25" Content="Botón 3" Grid.Row="1"                VerticalAlignment="Center" HorizontalAlignment="Center"/>     </Grid>   Normalmente le asociaríamos los eventos de la siguiente forma: public MainPage()         {             InitializeComponent();                 btn1.Click += new RoutedEventHandler(btn1_Click);             btn2.Click += new RoutedEventHandler(btn2_Click);             btn3.Click += new RoutedEventHandler(btn3_Click);         }           void btn1_Click(object sender, RoutedEventArgs e)         {             throw new NotImplementedException();         }           void btn2_Click(object sender, RoutedEventArgs e)         {             throw new NotImplementedException();         }           void btn3_Click(object sender, RoutedEventArgs e)         {             throw new NotImplementedException();         }   O así:             btn1.Click += (a, b) => { /*Código a implementar*/ };             btn2.Click += (a, b) => { /*Código a implementar*/ };             btn3.Click += (a, b) => { /*Código a implementar*/ };   bueno, el propósito de este post es proponer algo de la siguiente forma: public MainPage() {     InitializeComponent();       //De esta forma se levantan los handlers para todos lo botones     LayoutRoot.Children.ToList().ForEach(btn => ((Button)btn).Click += new RoutedEventHandler(btn_Click)); }   void btn_Click(object sender, RoutedEventArgs e) {     //Identificamos quien lo manda a llamar     switch (((Button)sender).Name)     {         case "btn1":             //Código para botón 1             break;         case "btn2":             //Código para botón 2             break;         case "btn3":             //Código para botón 3             break;     } }   Y ya para terminar, como no todo es perfecto en esta vida puede ser que no solo tengamos botones en nuestro LayoutRoot, si no todo tipo de controles que al hacerle el parse a Button nos marcará...

Read More