Domanda

io sto ignorando gli stili dei miei ListBoxItems con ControlTemplate, ma così facendo, ho perso il gestore per il mio evento ListBoxItem click. Ho trovato un post che è stato utile per dire ho bisogno di aggiungere un gestore di eventi nel ControlTemplate, ma non so come fare.

Qualsiasi aiuto e direzione a fare questo è molto apprezzato!

È stato utile?

Soluzione

ListBoxItem non ha un "click" evento, quindi non è chiaro che cosa stavate facendo o quello che hai perso la funzionalità quando è stato aggiunto il ControlTemplate.

Se si dispone di un pulsante nel vostro ControlTemplate è possibile impostare il suo evento Click esattamente nello stesso modo come si farebbe al di fuori del ContolTemplate. Ecco un semplice esempio in cui ListBoxItem non fa altro che mostrare un pulsante accanto al tenore e chiede che il pulsante di un gestore di eventi denominato "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>

Se quello che volevi dire è che si desidera che il ListBoxItem per visualizzare in modo diverso a seconda che l'elemento è selezionato o meno, è sufficiente impostare un trigger su 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>

Altri suggerimenti

E 'davvero il clic del mouse che stai dopo, o sei solo rispondendo ad un cambiamento di selezione? Se è così, si consiglia di utilizzare ListBox.SelectionChanged invece.

In caso contrario, io credo che sia così semplice come l'aggiunta di un onclick = ... nel modello; il mittente sarà l'elemento che ha ottenuto cliccato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top