2016-12-10 2 views
1

У меня есть окно WPF с большим количеством кнопок (btn_1, btn_2, btn_3 ... btn_81) и вместо того, чтобы создать клик-событие для каждой кнопки, как это:Один клик-событие для многих кнопок

private void btn_1_Click(object sender, RoutedEventArgs e) 
{ 
    if (backColor != null) 
     btn_1.Background = backColor; 
} 

private void btn_2_Click(object sender, RoutedEventArgs e) 
{ 
    if (backColor != null) 
     btn_2.Background = backColor; 
} 

Я хотел создать только одно событие click и получить как-то имя кнопки, которую я нажал, чтобы выполнить действие. Действие, выполняемое с клик-событием, для каждой кнопки одинаково: они должны менять фон.

Надеюсь, я мог бы объяснить мою проблему. TIA!

+0

найти способ динамически создавать 81 кнопки вместо. –

+1

'object sender' <== – McNets

+0

Ответы ниже, все правильно, но подход кажется неуклюжим. Вы должны посмотреть или ваш конкретный способ создания этих кнопок динамически (скорее всего, с элементами itemsControl (a), привязанными к коллекциям соответствующих моделей. Если вы можете предоставить немного более подробную информацию о своей программе, я могу показать вам, как сделайте это. –

ответ

5

В вашем XAML вы можете связать номе ttons нажмите события на тот же обработчик:

<StackPanel> 
     <Button Content="btn1" x:Name="btn1" Click="btn_Click"></Button> 
     <Button Content="btn2" x:Name="btn2" Click="btn_Click"></Button> 
     <Button Content="btn3" x:Name="btn3" Click="btn_Click"></Button> 
    </StackPanel> 

И код позади:

Brush backColor = new SolidColorBrush(Colors.Red); 

    private void btn_Click(object sender, RoutedEventArgs e) 
    { 
     Button btn = sender as Button; 

     if (btn != null && backColor != null) 
      btn.Background = backColor; 
    } 
+3

Я также проверил бы, если 'btn' равно null после« cast » –

+0

Да, хорошая точка. Обновлен ответ. – Noobie3001

4

Просто добавьте одно и то же событие к каждой кнопке. В вашем случае добавьте btn_1_Click. Вы можете сделать это как:

btn1.Click += btn1_Click; 
btn2.Click += btn1_Click; 
btn3.Click += btn1_Click; 
... 

или

btn1.Click += new EventHandler(btn1_Click); 
btn2.Click += new EventHandler(btn1_Click); 
btn3.Click += new EventHandler(btn1_Click); 
... 


private void btn1_Click(object sender, RoutedEventArgs e) 
{ 
    // do something 
} 
0

вы можете сделать

private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
    { 
     if (Equals(sender, bt1)) 
     { 

     } 
     else if(Equals(sender, bt2)) 
     { 

     } 
    } 

XAML

<Button Content="Button 1" Name="bt1" Click="ButtonBase_OnClick"/> 
<Button Content="Button 2" Name="bt2" Click="ButtonBase_OnClick"/> 
Смежные вопросы