XAML - 输入绑定可防止触发鼠标左按钮向下事件

本文关键字:按钮 事件 鼠标 输入 绑定 可防止 XAML | 更新日期: 2023-09-27 18:33:33

我有一个从ItemsControl派生的类,其中我实现了自己的选择算法,该算法使用MouseLeftButtonDown来更改选择。

现在,我需要一个特定的控件来处理 ViewModel 中的鼠标单击,因此我编写了以下内容:

<controls:DraggableItemsContainer bla="blub">
    <controls:DraggableItemsContainer.InputBindings>
        <MouseBinding Gesture="LeftClick" Command="{Binding DeselectSubGroupsCommand}" />
    </controls:DraggableItemsContainer.InputBindings>
</controls:DraggableItemsContainer>

现在发生的事情是,我不再得到 MouseLeftButtonDown-event - 这是可以理解的,因为命令"e.handles"点击。

但在这种情况下,这不是我想要的。无论如何,有没有办法触发事件?

PS:是的,我需要在鼠标左按钮向下事件中进行选择,而不是在任何预览事件中进行选择

XAML - 输入绑定可防止触发鼠标左按钮向下事件

两个选项:

  • 您可以让自定义 ItemsControl 挂钩PreviewMouseDown而不是MouseDown
  • 你可以继续挂接MouseDown,但通过调用 AddHandler 来实现,并为 handledEventsToo 参数传递true

如果在MouseBinding完成其工作后收到通知很重要,则需要使用 AddHandler .如果您同意先收到消息,PreviewMouseDown更简单。

我认为

您的问题是您尝试使用两种不同的方法在相同的控件上捕获相同的事件。

试试这个:

<Grid>
    <Grid.InputBindings>
        <MouseBinding Gesture="LeftClick" Command="{Binding DeselectSubGroupsCommand}" />
    </Grid.InputBindings>
    <controls:DraggableItemsContainer bla="blub">
         .....
    </controls:DraggableItemsContainer>
</Grid>

确保在您的控制中您有 e.Handled = false .

这应该允许内部逻辑运行,然后执行命令。如果你需要它以相反的顺序.....我不知道。