Nécessité de déclencher un événement lorsque ListBoxItem est cliqué dans ControlTemplate

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

Question

Je remplaçant les styles de mes ListBoxItems avec un ControlTemplate, mais en faisant cela, j'ai perdu le gestionnaire pour mon événement, cliquez ListBoxItem. J'ai trouvé un poste qui a été utile en disant que je dois ajouter un gestionnaire d'événements dans le ControlTemplate, mais je ne sais pas comment faire.

Toute aide et direction à faire est grandement appréciée!

Était-ce utile?

La solution

ListBoxItem n'a pas de « clic » l'événement, donc on ne sait pas ce que vous faites ou ce que vous avez perdu la fonctionnalité lorsque vous avez ajouté le ControlTemplate.

Si vous avez un bouton dans votre ControlTemplate vous pouvez définir son événement Click exactement de la même manière que vous le feriez en dehors du ContolTemplate. Voici un exemple simple où ListBoxItem ne fait rien d'autre que de montrer un bouton à côté du contenu, et ce bouton appelle un gestionnaire d'événement nommé « 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>

Si ce que vous vouliez dire est que vous voulez que votre ListBoxItem pour afficher différemment selon que l'élément est sélectionné ou non, vient de mettre un déclencheur sur 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>

Autres conseils

Est-il vraiment la souris clic, vous êtes après, ou êtes-vous simplement répondre à un changement de sélection? Si oui, vous pouvez utiliser ListBox.SelectionChanged à la place.

Sinon, je crois qu'il est aussi simple que l'ajout d'un onclick = ... dans le modèle; l'expéditeur sera l'élément qui a obtenu cliqué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top