2012-05-09 11 views
0

MouseLeftButtonDownを使用して選択を変更する独自の選択アルゴリズムを実装するItemsControlから派生したクラスがあります。XAML - InputBindingsはMouseLeftButtonDownイベントの発生を防ぎます

今、私はViewModelににマウスクリックを処理するための具体的な制御を必要とするので、私は次のように書いた: - comprehensableある

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

今何が起こるは、私はもうのMouseLeftButtonDownイベントを取得しないということであり、コマンドがクリックを "e.handles"するためです。

しかし、この場合、それは私が望むものではありません。とにかくイベントを起こす方法はありますか?

PS:はい、私は、任意のプレビューイベントでのMouseLeftButtonDownイベントで選択を行うとしないようにする必要があり

+0

その他の質問:「今は何が起こっているのですか」、あるいは「今起こっていることは...」といってもいいですか?私の英語力を向上させるのに役立ちます:-) – Jens

+0

どちらかといえば "もうどうなるの?" –

答えて

1

つのオプションが:

  • あなたはPreviewMouseDownの代わりMouseDownをフックのItemsControlカスタムを持つことができます。
  • MouseDownをフックし続けることができますが、AddHandlerを呼び出して実行し、handledEventsTooパラメータにはtrueを渡します。

MouseBindingの作業が完了した後に通知を受けることが重要な場合は、AddHandlerを使用する必要があります。あなたが最初にメッセージを受け取っても大丈夫なら、PreviewMouseDownは簡単です。

0

私はあなたの問題は、次の2つを使用して、同じコントロールに、同じイベントをキャッチしようということだと思います異なるアプローチ。

はこれを試してみてください:

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

あなたのコントロールにあなたはe.Handled = falseを持っていることを確認します。

これにより、内部ロジックを実行してからコマンドを実行することができます。あなたが逆の順序でそれを必要とすれば.....私は知らない。

関連する問題