2012-05-09 58 views
0

我有一個派生自ItemsControl的類,在該類中實現了我自己的選擇算法,該算法使用MouseLeftButtonDown更改選擇。XAML - InputBindings阻止MouseLeftButtonDown事件被觸發

現在我需要一個特定的控制來處理視圖模型的鼠標點擊,所以我寫了以下內容:

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

現在發生的事情是,我再也不會得到的MouseLeftButtonDown事件 - 這是comprehensable因爲命令「e.handles」的點擊。

但在這種情況下,這不是我想要的。無論如何,有沒有辦法解決這個問題?

PS:是的,我需要做的選擇中的MouseLeftButtonDown事件,而不是在任何預覽事件

+0

附加問題:你說「現在發生的事情是......」或「現在發生了什麼......」?幫助我提高我的英語水平:-) – Jens

+0

兩者都很好,但「現在發生的事情」可能會更普遍一些。 –

回答

1

兩個選項:

  • 您可以自定義的ItemsControl勾PreviewMouseDown而不是MouseDown
  • 您可以繼續掛接MouseDown,但通過調用AddHandler並通過true獲取handledEventsToo參數。

如果在MouseBinding完成工作後得到通知很重要,那麼您需要使用AddHandler。如果您可以先收到郵件,PreviewMouseDown更簡單。

0

我覺得你的問題是,你試圖抓住同樣的事件,在相同的控制,使用兩種不同的方法。

試試這個:

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

確保在你的控制,你有e.Handled = false

這應該允許您的內部邏輯運行,然後執行該命令。如果你需要它的方式相反......我不知道。

相關問題