Я присоединяю обработчик события PreviewMouseLoeftButtonDown к ListBox.Цель состоит в том, чтобы получить список ListBoxItem, по которому щелкнули, из параметра «e.Source» в обработчике событий.Это прекрасно работает со следующим кодом пользовательского интерфейса:
</ListBox>
<ListBox Name="listBox3">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBoxItem>
<Rectangle Height="25" Width="30">
</ListBoxItem>
</ListBox>
Код:
listBox3.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(PreviewMouseLeftButtonDown);
private void PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) {}
При выполнении «e.Source» заполняется элементом ListBoxItem, который я щелкнул.Это то, что я хочу, чтобы это произошло.
Однако приведенный ниже код не ведет себя так же.
<ListBox Name="listBox3">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Rectangle Width="30" Height="25"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
И
List<int> items = new List<int> {1};
listBox3.ItemsSource = items;
listBox3.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(PreviewMouseLeftButtonDown);
private void PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) {}
В этом случае прямоугольник вListBox показывает ОК.Однако в этом случае «e.Source» заполняется ListBox , содержащим элемент, который я щелкнул.Это не то, что я хочу, я хочу, чтобы e.Source содержал ListBoxItem , который я нажал, как это происходит в первом фрагменте кода, который я прикрепил выше.
Есть идеи?