ListBoxItems のスタイルを ControlTemplate でオーバーライドしていますが、それによって、ListBoxItem クリック イベントのハンドラーが失われました。ControlTemplate にイベント ハンドラーを追加する必要があるという投稿を見つけましたが、これを行う方法がわかりません。
これを行うためのヘルプと指示は大歓迎です!
ListBoxItems のスタイルを ControlTemplate でオーバーライドしていますが、それによって、ListBoxItem クリック イベントのハンドラーが失われました。ControlTemplate にイベント ハンドラーを追加する必要があるという投稿を見つけましたが、これを行う方法がわかりません。
これを行うためのヘルプと指示は大歓迎です!
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>
それは本当にあなたが求めているのはマウスのクリックですか、それとも単に選択の変更に反応しているだけですか? その場合は、代わりに ListBox.SelectionChanged を使用することをお勧めします。
それ以外の場合は、テンプレートに OnClick=... を追加するのと同じくらい簡単だと思います。送信者はクリックされた要素になります。