2010-06-11 4 views
0

Я начинаю C# и пытаюсь реализовать числовую панель в WPF. Он состоит из 10 аналогичных кнопок:Как обрабатывать события click на нескольких похожих кнопках в WPF?

<Button Content="0" Name="button0" Click="anyButtonClicked" /> 
<Button Content="1" Name="button1" Click="anyButtonClicked" /> 
<Button Content="2" Name="button2" Click="anyButtonClicked" /> 
... 
<Button Content="9" Name="button9" Click="anyButtonClicked" /> 

Какова наилучшая практика для обработки всех этих кнопок? Я строю функцию в коде для каждого из них (что будет в основном скучным и повторяющимся), или я создаю его для обработки любой нажатой кнопки?

Во втором случае, как определить, какая кнопка была нажата? Какое свойство объекта-отправителя мне нужно получить?

ответ

3

Если вы хотите использовать код позади, вы можете подключить его к одному обработчику событий, тогда вы можете передать отправителя кнопке (или элементу FrameworkElement) и проверить ее Name property.

Расширение ответа Гоблина ниже; если вы хотите придерживаться с кодом позади и событиями, которые вы можете определить событие на родительскую панели:

<StackPanel Button.Click="anyButtonClicked"> 
    <Button Content="0" Name="button0"/> 
    <Button Content="1" Name="button1"/> 
    <Button Content="2" Name="button2"/> 
    ... 
    <Button Content="9" Name="button9"/> 
</StackPanel> 

Затем используйте e.OriginalSource, литой в качестве кнопки или FrameworElement, чтобы получить имя.

private void anyButtonClicked(object sender, RoutedEventArgs e) 
{ 
    var source = e.OriginalSource as FrameworkElement; 

    if (source == null) 
     return; 

    MessageBox.Show(source.Name); 
} 

В качестве альтернативы вы могли бы принять подход MVVM, имеют одну команду, что все ваши кнопки связаны с, и передать CommandParameter дифференцировать их.

+0

Большое спасибо! Я тоже посмотрю на командование. –

1

Вы обрабатывать событие Button.Click в контроле Родитель:

<StackPanel Button.Click="anyButtonClicked"> 
    <Button Content="0" Name="button0"/> 
    <Button Content="1" Name="button1"/> 
    <Button Content="2" Name="button2"/> 
    ... 
    <Button Content="9" Name="button9"/> 
</StackPanel> 

Затем в EventHandler - вы можете проверить e.OriginalSource для нажатой кнопки.

РЕДАКТИРОВАТЬ: Что касается вашего вопроса о том, как с ним обращаться - вы можете использовать свойство Content кнопки, чтобы определить ключ, а затем использовать его для выполнения своей логики.

+0

спасибо. Умм, используется свойство контента хорошая идея? Я мог представить, что контент меняется в многоязычной среде. (Пока еще нет.) –

+1

Хе-хе - нет, по мере расширения вашего приложения - это, вероятно, не очень хороший идеал. Я согласен с Виром и Стивеном, чтобы идти по Командному пути, когда ты немного продвигаешься. «Сначала заработайте ...». – Goblin

1

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

Смежные вопросы