XAML - InputBindings阻止MouseLeftButtonDown-Events被触发

时间:2012-05-09 13:45:16

标签: c# events xaml

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

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

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

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

但在这种情况下,那不是我想要的。有没有办法解雇这个事件?

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

2 个答案:

答案 0 :(得分:1)

两个选项:

  • 您可以使用自定义ItemsControl挂钩PreviewMouseDown代替MouseDown
  • 您可以继续挂钩MouseDown,但可以通过调用AddHandler来执行此操作,并为true参数传递handledEventsToo

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

答案 1 :(得分:0)

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

试试这个:

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

确保您拥有e.Handled = false

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