Необходимо вызвать событие при нажатии ListBoxItem в ControlTemplate

Я переопределяю стили моих ListBoxItems с помощью ControlTemplate, однако в результате я потерял обработчик для моего события щелчка ListBoxItem. Я нашел сообщение, в котором было сказано, что мне нужно добавить обработчик событий в ControlTemplate, но я не знаю, как это сделать.

Любая помощь и руководство по этому вопросу очень ценится!

2 ответа

Решение

ListBoxItem не имеет события "щелчка", поэтому неясно, что вы делали или какие функции вы потеряли, когда добавили ControlTemplate.

Если у вас есть кнопка в ControlTemplate, вы можете установить ее событие Click точно так же, как и вне ContolTemplate. Вот простой пример, когда ListBoxItem не делает ничего, кроме показа Button рядом с содержимым, и эта кнопка вызывает обработчик событий с именем "OnClickMeButtonClicked":

<Style TargetType="ListBoxItem">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBoxItem">
        <DockPanel>
          <Button Content="ClickMe" Click="OnClickMeButtonClicked" />
          <ContentPresenter />
        </DockPanel>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Если вы имели в виду, что ваш ListBoxItem должен отображаться по-разному в зависимости от того, выбран элемент или нет, просто установите триггер на IsSelected:

<ControlTemplate TargetType="ListBoxItem">
  <Border Name="Bd">
    <ContentPresenter />
  </Border>

  <ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="true">
      <Setter TargetName="Bd" Property="Background" Value="Blue" />
    </Trigger>
  </ControlTemplate.Triggers>
</ControlTemplate>

Вы действительно щелкаете мышью или просто реагируете на изменение выбора? Если это так, вы можете использовать вместо ListBox.SelectionChanged.

В противном случае я считаю, что это так же просто, как добавить OnClick=... в шаблоне; отправитель будет элементом, по которому щелкнули.

Другие вопросы по тегам