You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为UWP应用的ListView绑定PointerReleased事件并解决不触发问题

问题根因

ListView 内置的 ListViewItem 项容器会默认处理 PointerReleased 等指针路由事件,用来支持选中、拖动等原生交互逻辑,事件被标记为 Handled = true 后就不会继续冒泡到上层的 ListView 控件,因此你直接绑定在 ScheduleListView 上的事件回调不会被触发。

可行解决方案

方案1:使用AddHandler强制接收已标记处理的事件(改代码量最小)

直接修改构造函数中的事件绑定逻辑,用 AddHandler 方法订阅事件,第三个参数传 true 即可强制接收哪怕被标记为已处理的路由事件,原有事件处理方法不用修改:

// 替换原来的 ScheduleListView.PointerReleased += LVI_PointerReleased; 为下面的代码
ScheduleListView.AddHandler(UIElement.PointerReleasedEvent, new PointerRoutedEventHandler(LVI_PointerReleased), true);

方案2:将事件绑定到每个ListViewItem容器

直接在XAML的ListView样式中给所有项容器绑定 PointerReleased 事件,避开上层事件冒泡拦截:

<ListView x:Name="ScheduleListView">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <EventSetter Event="PointerReleased" Handler="LVI_PointerReleased"/>
        </Style>
    </ListView.ItemContainerStyle>
    <!-- 你原有ListView的其他配置 -->
</ListView>

方案3:使用ListView内置的ItemClick事件(更符合列表交互场景)

如果你的需求就是点击列表任意区域后触发逻辑,可以直接用ListView原生的点击事件,无需处理指针事件的拦截问题:

  1. 先给ListView开启点击功能:
<ListView x:Name="ScheduleListView" IsItemClickEnabled="True" ItemClick="ScheduleListView_ItemClick">
  1. 后台实现对应事件方法:
private void ScheduleListView_ItemClick(object sender, ItemClickEventArgs e)
{
    CardSwipe.Focus(FocusState.Pointer);
}

内容的提问来源于stack exchange,提问作者Rez Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 13:06:03