我在试图弄清楚如何在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中定义的绑定,而不是更广泛/以后定义的绑定。