我有一个派生自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事件中进行选择,而不是在任何预览事件中进行选择
答案 0 :(得分:1)
两个选项:
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
。
这应该允许您的内部逻辑运行,然后执行命令。如果你需要相反的顺序.....我不知道。