2013-10-02 3 views
0

У меня есть группа пользовательских элементов управления с кнопками на них, которые хранятся в списке. Сейчас все они передают свои события с кнопками на главный скрипт и печатает «нажата кнопка», было бы лучше, если бы она напечатала «Button D», так как мне нужно было точно указать, какие кнопки были нажаты в массиве.Как определить, какой WPF UserControl был нажат?

ответ

1

Параметр отправителя в вызове события относится к кнопке отправки.

private void btn1_Click(object sender, RoutedEventArgs e) 
{ 
    Button button = (Button)sender; 
} 

Это может сработать, если первый один не делает:

private void btn1_Click(object sender, RoutedEventArgs e) 
{ 
    Button button = (Button)e.OriginalSource; 
} 

здесь более общий подход, если вы хотите только ListBoxItem

private void btn1_Click(object sender, RoutedEventArgs e) 
{ 
    object context = (e.OriginalSource as FrameworkElement).DataContext; 
    var lbi = lb.ItemContainerGenerator.ContainerFromItem(context) as ListBoxItem; 
} 

см сообщения: How to select ListBoxItem upon clicking on button in Template? How to retrieve sender in click handler from toolbartray or other control in wpf?

+0

Это не отправитель. Он должен быть OriginalSource в EventArgs – LadderLogic

+0

Есть ли способ заставить пользователя управлять кнопкой внутри? На самом деле я не хочу, чтобы кнопка была такой же, как и информация пользователя. – Coat

1

Не удалось вы не используете CommandParameter кнопки и ссылаетесь на это.

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