我用ControlTemplate覆盖了我的ListBoxItems的样式,但是通过这样做,我丢失了ListBoxItem单击事件的处理程序。我找到了一篇有助于说我需要在ControlTemplate中添加事件处理程序的帖子,但我不知道该怎么做。
任何帮助&这样做的方向非常感谢!
答案 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 = ...一样简单;发件人将是被点击的元素。