UWP中按钮鼠标中键点击事件的处理实现问题
UWP按钮处理鼠标中键点击的正确姿势
哎,这个坑我踩过!你用WPF的思路写UWP代码肯定行不通,因为UWP里的事件模型和WPF有不少差异——比如你代码里用的e.ChangedButton,在UWP的RoutedEventArgs里根本不存在,这是WPF独有的属性。
先给你看正确的实现方式,分两步来:
1. XAML里绑定正确的事件
别用默认的Click事件了,换成PointerPressed事件,它能捕获所有指针输入(包括鼠标、触摸、笔):
<Button x:Name="Button5" PointerPressed="Button5_PointerPressed" Content="点我试试中键" /> <Button x:Name="Button6" Content="初始文本" />
2. 后台代码处理中键逻辑
在PointerPressed事件里,我们可以拿到指针的具体信息,判断是不是鼠标中键:
private void Button5_PointerPressed(object sender, PointerRoutedEventArgs e) { // 获取当前指针在按钮上的点信息 var pointerInfo = e.GetCurrentPoint(Button5); // 先确认是鼠标输入,再判断是否按下中键 if (pointerInfo.PointerDevice.PointerDeviceType == PointerDeviceType.Mouse && pointerInfo.Properties.IsMiddleButtonPressed) { Button6.Content = "Hi"; // 可选:标记事件已处理,避免触发按钮默认的左键点击行为 e.Handled = true; } }
为什么你的原代码不行?
UWP的Button.Click事件是一个“抽象化”的点击事件——不管你用鼠标左键、触摸点击、键盘回车触发,都会触发这个事件,所以它的事件参数RoutedEventArgs不会携带具体的鼠标按键信息。而PointerPressed是更底层的输入事件,能直接获取到指针设备的类型、按键状态这些细节。
如果你的按钮还需要保留左键点击的原有逻辑,可以同时绑定Click事件处理左键,用PointerPressed专门处理中键,完全不冲突~
内容的提问来源于stack exchange,提问作者EsAMe




