我重写的风格我ListBoxItems用的ControlTemplate,但是通过这样做,我失去了处理程序,我ListBoxItem的单击事件。我发现了一个帖子,这是在说我需要在ControlTemplate中添加事件处理程序有帮助的,但我不知道如何做到这一点。

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

有帮助吗?

解决方案

ListBoxItem中没有一个“click”事件,所以目前尚不清楚你在做什么,或者什么功能,当您添加的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 = ...在模板;发送方将其得到点击的元素。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top