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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了触发器,命令不在自定义ListBox的ItemTemplate中触发相关的知识,希望对你有一定的参考价值。

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

这基本上就是我所拥有的(为了简洁而去掉了绒毛)。按钮:

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

以及Themes / Generic中的自定义控件样式:

<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>

我怎样才能举起这个活动?

答案

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

你是否真的要将模板更改为其他内容?

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

你提到了命令,这可能更像是它。

如果您使用项目模板中的按钮,其命令绑定为

 <Button Command="{Binding RowCommand}"

然后该Button的datacontext是行的内容。

如果将ItemsSource绑定到ItemVM的集合Items,那么它将查找呈现给该行的ItemVM。

以上是关于触发器,命令不在自定义ListBox的ItemTemplate中触发的主要内容,如果未能解决你的问题,请参考以下文章

自定义的 ListBoxItem 自适应ListBox的宽度

wpf 自定义ListBox

WPF自定义控件与样式-ScrollViewer与ListBox自定义样式

WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板

在dockframe窗口上添加自定义LISTBOX

007. 自定义ListBox的item的宽高, 字体居中