代码之家  ›  专栏  ›  技术社区  ›  TheGeekYouNeed

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

  •  0
  • TheGeekYouNeed  · 技术社区  · 14 年前

    我正在用ControlTemplate重写ListBoxItem的样式,但是这样做会丢失ListBoxItem Click事件的处理程序。我发现了一篇文章,它有助于说明我需要在ControlTemplate中添加一个事件处理程序,但我不知道如何做。

    非常感谢您提供的任何帮助和指导!

    2 回复  |  直到 14 年前
        1
  •  1
  •   Ray Burns    14 年前

    ListBoxItem没有“Click”事件,因此不清楚添加ControlTemplate时所做的操作或丢失的功能。

    如果在ControlTemplate中有一个按钮,则可以将其Click事件设置为与在ContoltEmplate之外完全相同的方式。下面是一个简单的示例,其中ListBoxItem除了在内容旁边显示一个按钮之外什么也不做,并且该按钮调用一个名为“onclickWebButtonClicked”的事件处理程序:

    <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>
    
        2
  •  0
  •   Lunivore    14 年前

    这是你真正想要的鼠标点击,还是你只是对选择的改变做出反应?如果是这样,您可能希望改用ListBox.SelectionChanged。

    否则,我相信这就像添加onclick=一样简单。在模板中,发送者将是被单击的元素。