0

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

これを行うためのヘルプと指示は大歓迎です!

4

2 に答える 2

1

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>
于 2010-06-17T12:26:25.743 に答える
0

それは本当にあなたが求めているのはマウスのクリックですか、それとも単に選択の変更に反応しているだけですか? その場合は、代わりに ListBox.SelectionChanged を使用することをお勧めします。

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

于 2010-06-17T10:15:15.917 に答える