【问题标题】:List View Double Tapped Item列表视图双击项目
【发布时间】:2017-10-11 22:12:21
【问题描述】:

我目前正在制作一个在 ListView 中包含多个 ListViewItems 的应用程序,这些 ListViewItems 会对双击事件做出反应。但是,我需要知道在 ListView 上双击时双击了哪个项目。

当 UWP 中的列表视图被双击时,它不会在触发双击事件之前选择项目。结果,我无法通过 myListView.SelectedItem 获取该项目。 UWP 似乎也不支持命中测试,除非我遗漏了什么。

想法?

【问题讨论】:

  • 检查这个问题stackoverflow.com/questions/45812310/…你也可以创建一个字段来保存之前选择的索引以进行双击比较
  • 当一个项目被双击时,选择改变永远不会触发。这是我问题的根源。
  • 尝试在ListViewItem的DataTemplate上注册DoubleTapped事件,而不是在ListView上。
  • @kennyzx 我最初尝试在创建listviewitem并将其添加到listview时注册它的双击事件。但是,我需要接收对单击的 listviewitem 的引用,并且由于我的项目包含一个文本框,因此如果单击该项目,它偶尔会返回文本框。有没有办法使用事件参数来获取 listviewitem 或(在项目是文本框的情况下)项目父项?
  • 修复了我自己的问题!我将在今天下午发布我的解决方案。感谢大家的帮助!

标签: c# xaml uwp


【解决方案1】:

我通过执行以下操作解决了我的问题:

  1. 我将 Listviewitem 内部网格上的 IsHitTestVisible 属性设置为 false(仅当列表视图中有控件时才适用)。

  2. 我订阅了 ListView 的双击事件

  3. 在事件触发时,我使用 DoubleTappedRoutedEventArgs 获取原始源并将其投射到 Listviewitem(或者在我的情况下,我的用户控件)。

代码如下:

自定义列表视图项: XAML

<ListViewItem x:Name="ListBoxItemContainer" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Padding="0,0">
    <Grid x:Name="MainGrid" HorizontalAlignment="Stretch" IsHitTestVisible="False">
        <!-- Your controls here -->
    </Grid>
</ListViewItem>

列表查看代码:

private async void MainListView_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
    {
        var test = (ListViewItem)MainListView.SelectedItem;
        // Test is your reference to the list view item that was clicked
    }

注意:确保订阅列表视图的双击事件。

【讨论】:

  • 如果用户双击列表视图中没有项目的区域,则使用 SelectedItem 是不正确的。
【解决方案2】:

试试这个:

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (ListView.SelectedIndex == -1) return;

        _previousIndex = ListView.SelectedIndex;

        if (_previousIndex == ListView.SelectedIndex)
        {
            //double-click occured
            _previousIndex = -2;
        }

        ListView.SelectedIndex = -1;
    }

【讨论】:

  • 正如您在原始评论中发布的那样,双击项目时不会触发 onselectionchanged 事件。
  • 使用它你不需要订阅任何双击
猜你喜欢
  • 2012-08-07
  • 2012-02-07
  • 1970-01-01
  • 2012-12-04
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多