You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动