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

2つのオプション:

  • PreviewMouseDownの代わりにカスタムItemsControlフックを使用できますMouseDown
  • フックを続行できますがMouseDown、を呼び出してフックし、パラメーターAddHandlerを渡します。truehandledEventsToo

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

于 2012-05-13T12:14:38.783 に答える
0

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

これを試して:

<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 に答える