Нужно вызвать событие, когда ListBoxItem нажат в ControlTemplate

StackOverflow https://stackoverflow.com/questions/3060606

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top