ListBox PreviewMouseLeftButtonВниз проблемы с DataTemplate - PullRequest
1 голос
/ 13 июля 2010

Я присоединяю обработчик события 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 , который я нажал, как это происходит в первом фрагменте кода, который я прикрепил выше.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Вместо того, чтобы полагаться на Source или OriginalSource как на ListBoxItem, почему бы не установить событие на самом ListBoxItem через Стиль?удостоверится, что источником всегда будет ListBoxItem.

0 голосов
/ 13 июля 2010

e.OriginalSource выдаст ListboxItem

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...