Список Silverlight запускает MouseRightButtonDown, но не MouseLeftButtonDown - PullRequest
3 голосов
/ 11 мая 2010

У меня есть эта проблема в более крупном проекте ...... поэтому я установил «Testpoject» в качестве доказательства концепции:

  • Новое приложение Silverlight
  • Добавить список
  • Заполнить список несколькими флажками
  • Регистрация listBox1_MouseLeftButtonDown
  • зарегистрировать списокBox1_MouseRightButtonDown

Вы увидите, что listBox1_MouseLeftButtonDown не будет срабатывать ни при каких обстоятельствах .... Однако listBox1_MouseRightButtonDown срабатывает просто отлично.

Я попытался использовать собственный класс, производный от ListBox и переопределения, предполагая, что что-то в классе ListBox устанавливало e.Handled = false, но это также не изменило поведение.

Есть идеи о том, почему это происходит и как это исправить?

(Эта проблема также не позволяет родительскому элементу управления получить событие Click ... так что передача события прерывается)

: редактировать: Я исправил проблему с помощью обходного пути ... поэтому ответа больше не требуется. Просто если кому-то хочется понять, почему это происходит ради этого;)

Ответы [ 2 ]

5 голосов
/ 09 августа 2010

Это , кажется, отвечает на ваш вопрос. Цитировать:

Это потому, что ListBoxItem внутренне обрабатывает это событие, а также событие MouseLeftButtonDown (прекращение всплытия) для реализации выбора элемента.

Решение состоит в том, чтобы добавить обработчик событий в файл code-behind. Из статьи:

Хотя установка свойства Handled параметра RoutedEventArgs в true в обработчике перенаправленных событий, по-видимому, останавливает туннелирование или образование пузырьков, отдельные обработчики, расположенные выше или ниже по дереву, могут в любом случае выбрать получение событий! Это можно сделать только из процедурного кода, используя перегрузку AddHandler, которая добавляет логический параметр handledEventsToo.

См. Предостережение в конце.

1 голос
/ 08 декабря 2010

Это по замыслу. Если вы проверите код платформы, вы увидите, что ListBoxItem устанавливает свойство Handled в значение true.

У меня была точно такая же проблема, поэтому в моем ListBoxItem.ItemTemplate я добавил обработчик событий в свой контент.

<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal" MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">
        ... other controls ...
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>
...