Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在UWP列表框中获得双击事件而不是单个事件?_C#_Uwp - Fatal编程技术网

C# 为什么在UWP列表框中获得双击事件而不是单个事件?

C# 为什么在UWP列表框中获得双击事件而不是单个事件?,c#,uwp,C#,Uwp,我有一个包含一些元素的列表框。在my Page.XAML页面中,我有如下内容: <ListBox SelectionMode="Single" SelectionChanged="SelectedIndexChanged" x:Name="myList" HorizontalAlignment="Center" Margin="0,0,0,0" Width="350" Height="900" BorderThickness="0,0,0,0" RequestedTheme="Defaul

我有一个包含一些元素的列表框。在my Page.XAML页面中,我有如下内容:

<ListBox SelectionMode="Single" SelectionChanged="SelectedIndexChanged" x:Name="myList" HorizontalAlignment="Center" Margin="0,0,0,0" Width="350" Height="900" BorderThickness="0,0,0,0" RequestedTheme="Default" VerticalAlignment="Top" FontSize="20" IsDoubleTapEnabled="False" IsHoldingEnabled="False" IsRightTapEnabled="False" Background="Transparent">
一切似乎都是正确的,但当我单击窗口对话框的一个按钮时(在选择列表框的一个元素后),窗口对话框将再次出现两次,而不是仅仅返回主窗口

有什么我遗漏的吗

谢谢

正如评论中所指出的,由于您正在从列表中删除所选项目,因此将触发第二个事件

删除当前选定的项目时,
SelectedIndex
设置为默认值,即-1。因此,如果用户选择了 索引X处的项目,删除项目后,它将更改为-1,因此 触发
SelectedIndexChanged
事件

-1
SelectedIndex
表示列表中当前没有选定项


因此,解决此问题的最简单方法就是添加一个检查,查看所选索引是否为-1

 private async void SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
    {
        int itemIndex = myList.SelectedIndex;
        //checking if the selected index is -1 (or no item is actually selected)
        if (itemIndex != -1)
        {
            var messageDialog = new MessageDialog("What do you want to do?", "Alert!");
            messageDialog.Commands.Add(new UICommand("Do It", null));
            messageDialog.Commands.Add(new UICommand("Don't do it", null));
            messageDialog.Commands.Add(new UICommand("Cancel", null));
            var cmdClick = await messageDialog.ShowAsync();
            Debug.WriteLine(itemIndex);
            if (cmdClick.Label == "Do It")
            {
                Debug.WriteLine("Do It");
                myList.Items.RemoveAt(itemIndex);
                return;
            }
            if (cmdClick.Label == "Don't do it")
            {
                Debug.WriteLine("No defect");
                myList.Items.RemoveAt(itemIndex);
                return;
            }
            if (cmdClick.Label == "Cancel")
            {
                Debug.WriteLine("Cancel");
                return;
            }
        }

    }

希望这有帮助

您选择一个项目,将触发first SelectedIndexChanged。然后在前2个
中,如果从列表中删除当前选定的项目,则选定的索引将再次更改,第二个事件为firedso,您建议如何管理此问题?
 private async void SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
    {
        int itemIndex = myList.SelectedIndex;
        //checking if the selected index is -1 (or no item is actually selected)
        if (itemIndex != -1)
        {
            var messageDialog = new MessageDialog("What do you want to do?", "Alert!");
            messageDialog.Commands.Add(new UICommand("Do It", null));
            messageDialog.Commands.Add(new UICommand("Don't do it", null));
            messageDialog.Commands.Add(new UICommand("Cancel", null));
            var cmdClick = await messageDialog.ShowAsync();
            Debug.WriteLine(itemIndex);
            if (cmdClick.Label == "Do It")
            {
                Debug.WriteLine("Do It");
                myList.Items.RemoveAt(itemIndex);
                return;
            }
            if (cmdClick.Label == "Don't do it")
            {
                Debug.WriteLine("No defect");
                myList.Items.RemoveAt(itemIndex);
                return;
            }
            if (cmdClick.Label == "Cancel")
            {
                Debug.WriteLine("Cancel");
                return;
            }
        }

    }