【问题标题】:How to resolve delay in SelectedIndex for GridViewItem c# (UWP)如何解决 GridViewItem c# (UWP) 的 SelectedIndex 中的延迟
【发布时间】:2020-11-10 03:13:14
【问题描述】:

第一个帖子哇! - 我有一个向用户提供 4 个选项的网格视图。选择项目 0 会显示与该选项相关的隐藏子菜单,而其他项目具有不同的功能。为了选择正确的索引,我必须进行两次选择。 SelectedIndex 从 -1 开始,根据文档,这是预期的行为并且非常有意义。如果我使用索引为 0 初始化视图,则项目的边框突出显示,就好像它被选中一样,只需单击一下即可激活菜单,但如果我单击任何其他项目,则需要单击两次才能注册这些项目。

例如,如果我选择了索引 0,然后选择索引 1,它会显示索引 0,然后如果我再次选择索引 0,它会显示索引 1。

        private void GridView_ItemClick(object sender, ItemClickEventArgs e)
    {
        
        int index = StudyTypeGrid.SelectedIndex;
        var selected = e.ClickedItem;
        System.Diagnostics.Debug.WriteLine("Index: " + index);
        System.Diagnostics.Debug.WriteLine("Item: " + selected.ToString());

        if (selected != null && index == 0)
        {
            HiddenOptionPanel.Visibility = Visibility.Visible;
        }else
        {
            HiddenOptionPanel.Visibility = Visibility.Collapsed;
        }
    }

这是 Xaml 的一部分:

                        <GridView x:Name="StudyTypeGrid"  HorizontalAlignment="Center" Margin="0,20,0,0" ItemClick="GridView_ItemClick"
                              IsItemClickEnabled="True" IsDoubleTapEnabled="False">
                        <GridViewItem Height="200" Width="200" >
                            <StackPanel Width="200">
                                <StackPanel Height="100">
                                    <TextBlock Text="Option 1" FontSize="24" TextWrapping="WrapWholeWords"
                                               HorizontalAlignment="Center"  TextAlignment="Center" Margin="0,20,0,0" />
                                </StackPanel>
                                <StackPanel Background="LightGray" Height="100">
                                    <TextBlock Text="Description"
                                               TextWrapping="WrapWholeWords" TextAlignment="Center" VerticalAlignment="Center" />
                                </StackPanel>
                            </StackPanel>
                        </GridViewItem>

我还尝试将 IsDoubleTapEnabled 设置为 false,并尝试引用所选对象而不是所选索引。原始的 If 语句只有索引 == 0,但留下了“已选择”以显示我也尝试过该路线。从左到右再返回,我得到以下输出:

索引:-1
项目:Windows.UI.Xaml.Controls.StackPanel
索引:0
项目:Windows.UI.Xaml.Controls.StackPanel
索引:1
项目:Windows.UI.Xaml.Controls.StackPanel
索引:2
项目:Windows.UI.Xaml.Controls.StackPanel
索引:3
项目:Windows.UI.Xaml.Controls.StackPanel
索引:2
项目:Windows.UI.Xaml.Controls.StackPanel
索引:1
项目:Windows.UI.Xaml.Controls.StackPanel

这个视图是从一个也有 gridview 的页面启动的,并且以同样的方式响应。我错过了什么?

【问题讨论】:

    标签: c# xaml gridview uwp selectedindex


    【解决方案1】:

    当ItemClick事件被触发时,当前选中的item并没有改变,所以其SelectedIndex的值仍然是之前选中的索引,这是一个预期的行为。如果要显示正确的 SelectedIndex,可以订阅 SelectionChanged 事件。在这种情况下,SelectedIndex 是当前选择的索引。

    private void StudyTypeGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        int index = StudyTypeGrid.SelectedIndex;
        var selected = e.AddedItems[0];
        System.Diagnostics.Debug.WriteLine("Index: " + index);
        System.Diagnostics.Debug.WriteLine("Item: " + selected.ToString());
    
        if (selected != null && index == 0)
        {
            HiddenOptionPanel.Visibility = Visibility.Visible;
        }
        else
        {
            HiddenOptionPanel.Visibility = Visibility.Collapsed;
        }
    }
    

    【讨论】:

    • 非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多