Обработчик кнопки MouseLeftButtonDown, но все же хочет, чтобы событие всплыло

У меня есть список с DataTemplate для элементов. Внутри моего шаблона есть ярлык и 3 кнопки.

Моя проблема в том, что когда я нажимаю кнопки, элемент списка никогда не выбирается, поскольку кнопка обрабатывает событие.

Есть ли способ сделать так, чтобы событие по-прежнему всплывало вверх по дереву, чтобы мой элемент списка стал выбранным и по-прежнему нажимал кнопку?


person SiriusNik    schedule 22.09.2011    source источник
comment
См. Этот вопрос: заголовок stackoverflow.com/questions/662201/   -  person CodingGorilla    schedule 22.09.2011
comment
На этот вопрос есть лучший ответ: stackoverflow.com/q/7013538/302677   -  person Rachel    schedule 22.09.2011


Ответы (1)


Поместите это в свой ListBox.Resources

<Style TargetType="{x:Type ListBoxItem}">
    <EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
</Style>

И это в скрытом коде

protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
    ListBoxItem item = (ListBoxItem)sender;
    item.IsSelected = true;
}

Вы также можете использовать следующий код, который не использует код программной части, однако он сохраняет выбранным ListBoxItem только до тех пор, пока он имеет фокус KeyBoard. Когда фокус покидает фокус, элемент становится невыделенным.

<Style TargetType="ListBoxItem">
  <Style.Triggers>
    <Trigger Property="IsKeyboardFocusWithin" Value="True">
      <Setter Property="IsSelected" Value="True" />
    </Trigger>
  </Style.Triggers>
</Style>
person Rachel    schedule 22.09.2011
comment
Вы можете отдать должное там, где это необходимо: stackoverflow.com/questions/653524/ - person CodingMadeEasy; 01.02.2016
comment
@CodingMadeEasy. Я уже давно проголосовал за него :) Я скопировал этот ответ из этого моего ответа, это очень частый вопрос здесь, на сайте. - person Rachel; 01.02.2016
comment
Хорошо, если повторить ответ, как это помогает сообществу? Это создает дублирование ответов, а не разнообразие ответов. Вы должны были отослать OP к своему другому ответу. - person CodingMadeEasy; 01.02.2016
comment
@CodingMadeEasy Это не тот же вопрос, поэтому не заслуживаю того же ответа :) Иногда я голосую за закрытие как дубликат, но теперь мне нужно быть осторожным, потому что у меня есть золотой значок wpf, и он больше не занимает 5 голосов если я сделаю. Этот ответ был дан много лет назад, и мне нравится думать, что с тех пор я улучшил качество ответа :) - person Rachel; 02.02.2016