Необходимо вызвать событие при нажатии 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=... в шаблоне; отправитель будет элементом, по которому щелкнули.