listboxItemがcontroltemplateでクリックされたときにイベントをトリガーする必要があります

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

質問

listBoxItemsのスタイルをControlTemplateでオーバーライドしていますが、それを行うことで、ListBoxItem Clickイベントのハンドラーを失いました。 ControlTemplateにイベントハンドラーを追加する必要があると言うのに役立つ投稿を見つけましたが、これを行う方法はわかりません。

これを行うためのヘルプと方向性は大歓迎です!

役に立ちましたか?

解決

ListBoxItemには「クリック」イベントがないため、ControlTemplateを追加したときに何をしているのか、どの機能を失ったかは明確ではありません。

ControlTemplateにボタンがある場合は、Contoltemplateの外側とまったく同じ方法でクリックイベントを設定できます。 ListBoxItemがコンテンツの横にあるボタンを表示する以外に何もしない簡単な例を示します。

<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.selectionChangedを使用することができます。

そうでなければ、テンプレートにonclick = ...を追加するのと同じくらい簡単だと思います。送信者は、クリックされた要素になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top