1

WPF で同じマウス アクションに対して異なる修飾キーに対して異なるコマンドをトリガーする方法を見つけようとして、問題が発生しました。ユーザーがポイントを選択できるようにするグラフクラスのセットを開発しました。グラフオブジェクトは選択されたポイントのリストを保持し、ポイントをパラメーターとして渡したときのコマンドは、指定されたポイントのみを選択する必要があります。 (SelectPointCommand) またはポイントを現在の選択に追加します (AddPointToSelectionCommand)。

コマンドの実行時に実行されるコードで Keyboard.Modifiers をチェックするだけでよいことは承知していますが、グラフ オブジェクト自体の特定の修飾キーに制限するのではなく、かなり高いレベルで機能を提供したいと考えています。同じ機能を他の方法で簡単にトリガーできるようにします。ボタンをクリックします。

次の XAML が機能すると考えていたでしょう (境界線は実際のデータ テンプレートを単純化したものであり、マウス ジェスチャの検出に問題はありません)。

<Border DataContext="{Binding Point}">
    <Border.InputBindings>
        <MouseBinding Gesture="Ctrl+LeftClick" Command="{Binding Line.Graph.AddPointToSelectionCommand, Mode=Onetime}" CommandParameter="{Binding}" />
        <MouseBinding Gesture="Shift+LeftClick" Command="{Binding Line.Graph.AddPointToSelectionCommand, Mode=Onetime}" CommandParameter="{Binding}" />
        <MouseBinding Gesture="LeftClick" Command="{Binding Line.Graph.SelectPointCommand, Mode=Onetime}" CommandParameter="{Binding}" />
    </Border.InputBindings>
</Border>

この XAML では、どの修飾キーが押されているかに関係なく、ほとんどの場合、LeftClick の MouseBinding がトリガーされます。Ctrl+LeftClick または Shift+LeftClick は時々トリガーされるようですが、特定のパターンではトリガーされません。修飾子を使用したより具体的なバインディングがトリガーされなかった場合にのみ LeftClick MouseBinding がトリガーされるという仮定の下で、より高いレベル (およびより低いレベル) で LeftClick マウスバインディングを定義しようとしましたが、そのようには機能しないようです。

より一般的な意味で、同じマウスアクションを異なる修飾キーで異なるコマンドにバインドすることは実際に可能ですか? より具体的なバインディング、または XAML で以前に定義されたバインディングが、より広範な/後で定義されたものではなくトリガーされると考えていたでしょう。

4

0 に答える 0