在ControlTemplate中单击ListBoxItem时需要触发事件

时间:2010-06-17 09:56:27

标签: c# wpf listbox virtualizingstackpanel

我用ControlTemplate覆盖了我的ListBoxItems的样式,但是通过这样做,我丢失了ListBoxItem单击事件的处理程序。我找到了一篇有助于说我需要在ControlTemplate中添加事件处理程序的帖子,但我不知道该怎么做。

任何帮助&这样做的方向非常感谢!

2 个答案:

答案 0 :(得分:1)

ListBoxItem没有“click”事件,所以在添加ControlTemplate时不清楚你在做什么或丢失了什么功能。

如果ControlTemplate中有一个按钮,则可以将其设置为与ContolTemplate外部完全相同的方式。这是一个简单的例子,其中ListBoxItem除了在内容旁边显示一个Button之外什么都不做,而该按钮调用一个名为“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>

答案 1 :(得分:0)

是否真的是您正在点击的鼠标,或者您只是对选择的变化作出回应?如果是这样,您可能希望改为使用ListBox.SelectionChanged。

否则我相信它就像在模板中添加OnClick = ...一样简单;发件人将是被点击的元素。