Необходимо вызвать событие при нажатии ListBoxItem в ControlTemplate - PullRequest
0 голосов
/ 17 июня 2010

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

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

Ответы [ 2 ]

1 голос
/ 17 июня 2010

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

Если у вас есть кнопка в вашем ControlTemplate, вы можете установить ее событие Click точно так же, как и вне 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>

Если вы имели в виду, что 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>
0 голосов
/ 17 июня 2010

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

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

...