【问题标题】:Triggers, commands not firing in custom ListBox's ItemTemplate触发器,未在自定义 ListBox 的 ItemTemplate 中触发的命令
【发布时间】:2019-04-22 18:20:29
【问题描述】:

我有一个自定义 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>

我怎样才能触发这个事件?

【问题讨论】:

    标签: wpf events listbox custom-controls listboxitem


    【解决方案1】:

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

    你真的要把这个模板改成别的东西吗?

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

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

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

     <Button Command="{Binding RowCommand}"
    

    那么那个Button的datacontext就是该行的内容。

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

    【讨论】:

    • 我把它做成了一个自定义控件,这样我就可以对项目源应用过滤,类似于在 VS 的列表中键入“.R”时,可能会出现“.Reverse()”。不确定将模板更改为其他内容是什么意思。我的 ControlTemplate 比我上面显示的要多一点,但我认为我确实需要它来按照我想要的方式设置控件的样式。对于我打算如何使用委托/处理程序,sender/EventArg 参数为我提供了在按下按钮时执行我想要的逻辑所需的一切。
    • 我有一个命令工作,但如前所述,只有当我用我的 xaml 中的默认 ListBox 替换自定义控件时。这就是为什么我怀疑这不是 DataContext 问题。现在,我在按钮上使用了 PreviewMouseDown 事件,这很有效。所以也许由于某种原因,点击事件在它不应该处理的地方得到了处理,尽管我没有看到任何会在我的自定义控件的任何地方导致这种情况。
    • 当您单击列表框项目时,该项目被选中。处理鼠标点击的过程。如果你想处理点击事件,你必须在行内放一些东西。
    • 我正在单击 ListBoxItem 的 ItemTemplate 中的一个按钮,该按钮没有选择 ListBoxItem(我附加了一个 SelectionChanged 处理程序,当我单击该按钮时它没有触发,这正是我想要的) .
    • 然后bind被选择为双向并在行视图模型上被选择。 stackoverflow.com/questions/55780718/…
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多