0

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

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

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

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

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

PS:是的,我需要在 MouseLeftButtonDown 事件中进行选择,而不是在任何预览事件中

4

2 回答 2

1

两种选择:

  • 您可以使用自定义 ItemsControl 挂钩PreviewMouseDown而不是MouseDown.
  • 您可以继续 hook MouseDown,但通过调用AddHandler, 并传递参数true来完成handledEventsToo

如果在MouseBinding完成工作后收到通知很重要,那么您需要使用AddHandler. 如果您可以先收到消息,那就PreviewMouseDown更简单了。

于 2012-05-13T12:14:38.783 回答
0

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

尝试这个:

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

确保在您的控制范围内您拥有e.Handled = false.

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

于 2012-05-13T12:04:38.347 回答