WPF按钮右键命令?

11

我正在学习WPF中的MVVM和Commands。我有几个按钮,我想根据鼠标左右键的点击来触发类似的命令。

到目前为止,我使用了事件处理程序,并且通过检查MouseButtonEventArgs能够确定按下了哪个鼠标按键。

<Button Content="Command Test" PreviewMouseDown="Button_PreviewMouseDown"/>

当前的代码:

private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
    if (e.LeftButton == MouseButtonState.Pressed) {
        Debug.Print("Left");
    }
    else {
        Debug.Print("Right");
    }
}

但是如果我使用命令,我没有看到任何类似的东西。

如何为一个按钮设置不同的命令?当左键点击时有一个命令,右键点击时有另一个命令?

<Button Content="Command Test" Command="{Binding PressLetterCommand, Mode=OneWay}"/>

目前该命令仅在单击左鼠标按钮时触发。如果该命令也会在单击右鼠标按钮时触发,并且我可以找出单击的是哪个按钮,那将是另一种解决方案。

我搜索并找到了这个使用装饰器的问题和答案。如何在WPF的ControlTemplate中将命令绑定到右鼠标按钮等? 我尝试过,但据我所知,这对我的按钮不起作用。

有什么建议吗?


1
一个按钮被点击时,无论是左键还是右键,或者键盘如果它有焦点。这就是为什么它只有一个单击事件和一个单一命令。不要改变这种行为。 - Clemens
改变按钮的标准行为有什么好处?你见过多少应用程序在右键单击按钮时具有某些行为? - Dennis
@Clemens:我使用从A到Z的字母按钮,让用户在通常只能用鼠标的表单上输入一些文本。如果点击左键,则字母为大写,右键则为小写。这可能不是完美的解决方案,但我比起额外的Shift按钮或26个小写字符按钮更喜欢它。 - Edgar
1个回答

33

试一下

<Button Content="Command Test">
    <Button.InputBindings>
        <MouseBinding Gesture="RightClick" Command="{Binding PressLetterCommand}" />
    </Button.InputBindings>
</Button>

5
谢谢,这个方法很好用。我尝试了一个小时的这个和那个,然后在StackOverflow上在10分钟内得到了答案。太棒了! - Edgar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接