触发器,命令未在自定义ListBox的ItemTemplate中触发

时间:2019-04-21 16:02:34

标签: wpf events listbox custom-controls listboxitem

我有一个自定义ListBox控件,该控件具有在我的Themes / Generic.xaml中设置的样式。然后,我在列表框的ItemTemplate中有一个按钮,并且它的Click事件没有触发,我也不知道为什么。按钮的Commands(我相信Command问题与DataContext无关)和交互触发器也是如此。在尝试调试时,我注意到使用默认的ListBox而不是我自己的列表框已解决了问题,但是我需要使用自定义控件。

从本质上讲,这就是我所拥有的(为了简洁起见,除去绒毛)。按钮:

<controls:CustomListBox>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Button Click=MyHandler/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</controls:CustomListBox>

主题/通用中的自定义控件样式:

<Style TargetType="{x:Type controls:CustomListBox}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type controls:CustomListBox}">
        <Border>
          <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}">
            <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
          </ScrollViewer>
         </Border>
       </ControlTemplate>
     </Setter.Value>
   </Setter>
 </Style>

如何触发此事件?

1 个答案:

答案 0 :(得分:0)

我认为这可能应该是用户控件而不是自定义控件。

您真的要为此更改模板吗?

如果您使用类似的事件处理程序,那么您打算如何使用委托?这是您工作的一种非常灵活的方式。

您提到的命令,可能更像它。

如果您在项目模板中使用带有命令绑定之类的按钮

 <Button Command="{Binding RowCommand}"

然后该Button的数据上下文就是该行的内容。

如果将ItemsSource绑定到ItemVM的Items集合,则它将在显示给该行的ItemVM中查找。