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 鼠标绑定,假设 LeftClick MouseBinding 只会在带有修饰符的更具体的绑定没有触发但它似乎不起作用的情况下才会触发。

从更一般的意义上说,实际上是否可以将具有不同修饰键的相同鼠标操作绑定到不同的命令?我原以为会触发更具体的绑定或在 XAML 中较早定义的绑定,而不是更广泛/后来定义的绑定。

4

0 回答 0