Нужно вызвать событие, когда ListBoxItem нажат в ControlTemplate
-
28-09-2019 - |
Вопрос
Я переопределяю стили моих списков с помощью ControlTemplate, однако, делая это, я потерял обработчик для моего ListBoxItem Click Event. Я нашел сообщение, которое было полезно, сказав, что мне нужно добавить обработчик событий в ControlTemplate, но я не знаю, как это сделать.
Любая помощь и направление на это очень ценится!
Решение
ListBoxItem не имеет события «щелчка», поэтому неясно, что вы делаете или какие функциональные возможности вы потеряли, когда вы добавили ControlTemplate.
Если у вас есть кнопка в вашей ControlTemplate, вы можете установить это событие щелчка точно так же, как вы снажедите за пределами ContolTemplate. Вот простой пример, где ListBoxItem ничего не делает, кроме отображения кнопки рядом с содержимым, и эта кнопка вызывает обработчик событий с именем «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>
Если то, что вы имеете в виду, вы хотите, чтобы ваш список по-прежнему отобразится, в зависимости от того, выбран ли элемент или нет, просто установите триггер на 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.
В противном случае я считаю, что это так же просто, как добавление onclick = ... в шаблоне; Отправитель будет элементом, который щелкнул.