1

当我双击列表视图项时,我得到了 DoubleTapped 事件。

但我不确定如何获取执行点击的选定项目。ListView.Selecteditem 没有给我点击的项目。

请帮忙。

4

3 回答 3

2

我找到了解决这个问题的方法。

在获取 DoubleTap 事件之前点击列表视图项时,您将获取 GetFocus 事件。在这种情况下,您将获得选定的项目,您可以在 Doubletap 中使用此选定的项目。

private async void OnDoubleClick(object sender, 
Windows.UI.Xaml.Input.DoubleTappedRoutedEventArgs e)    
{

}
private void OnFocus(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
ListviewItem lv = (ListViewItem)e.OriginalSource;
string str = lv.SelectedItem.tostring();
}

谢谢

于 2013-10-19T05:22:26.683 回答
2

DataGrid 和 ListView 有很好的方法 HitTest,通过它你可以得到选中的项目。

private void ListView_Tapped(object sender, TappedRoutedEventArgs e)
    {
        var listView = sender as ListView;
        if (!(sender is ListView))
        {
            return;
        }

        var hitTest = listView.HitTest(e.X, e.Y);

        ListViewItem tappedListViewItem = hitTest.Item;
    }
于 2013-10-18T11:39:44.393 回答
1

正如 Aaron Xue here所说,您无法直接通过 Tapped 事件获取点击的项目。但是,您可以获取 Y 坐标并计算我们单击的项目索引,然后获取项目:

private void ListView_Tapped(object sender, TappedRoutedEventArgs e)
{
    int item = 0;
    Double coY = e.GetPosition((UIElement)sender).Y;

    ListView lv = sender as ListView;
    if (sender is ListView)
    {
        lv.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
        Size lvSize = lv.DesiredSize;
        item = (int)(coY / lvSize.Height * lv.Items.Count);
        item = item > lv.Items.Count ? lv.Items.Count : item;
    }

    var TappedItem = lv.Items[item];
}
于 2013-10-18T10:39:20.697 回答