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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我在UWP列表框中获得双击事件而不是单个事件?相关的知识,希望对你有一定的参考价值。

我有一个包含一些元素的列表框。在我的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">

我创建了SelectedIndexChanged事件来检查我何时单击列表框的一个元素:

Page.XAML.cs

 private async void SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
    {
        int itemIndex = myList.SelectedIndex;

        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;
        }
    }

一切似乎都是正确的但是当我点击窗口对话框的一个按钮时(在选择列表框的一个元素之后),窗口对话框再次出现总共两次而不是仅返回到主窗口。

有什么我想念的吗?

谢谢

答案

正如Gian Paolo在评论中指出的那样,第二个事件被解雇,因为您要从列表中删除所选项目。

删除当前选定的项目时,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;
            }
        }

    }

希望这可以帮助 !

以上是关于为什么我在UWP列表框中获得双击事件而不是单个事件?的主要内容,如果未能解决你的问题,请参考以下文章

日历日期选择器下一个按钮 UWP 是不是有任何刷新事件?

在 tkinter 中禁用鼠标双击事件

什么 UWP API 引发购买事件?

jQuery 自动完成选择事件

easyui 双击事件

easyui 双击事件