Контекст данных кнопки будет содержать элемент данных источника, соответствующий элементу списка. Вы не показали, какой у вас ItemsSource
список, поэтому я не могу точно указать, какой код вам нужен. Но как то так:
ObservableCollection<MyDataItem> items = new ObservableCollection<MyDataItem>();
...
myList.ItemsSource = items;
...
private void ViewDetail_Click(object sender, RoutedEventArgs e)
{
Button b = (Button) sender;
MyDataItem detailItem = (MyDataItem) b.DataContext;
int itemIndex = items.IndexOf(detailItem);
}
Конечно, если причина, по которой вы запрашиваете индекс в первую очередь, в том, что вы хотите получить соответствующий элемент данных, вам на самом деле не нужен индекс вообще - элемент уже находится прямо в контекст данных.
Кстати, я бы не использовал здесь ListBox
. Главное, что ListBox
привносит на вечеринку, это выбор, но, помещая кнопки в качестве элементов, вы побеждаете это - как вы уже обнаружили, кнопка обрабатывает ввод с помощью мыши, прежде чем у списка появится шанс Это означает, что вы не можете выбрать элементы. В какой момент, почему есть ListBox
? База ItemsControl
, вероятно, имеет больше смысла. (Заворачивается в ScrollViewer
, если вам нужна прокрутка.)