如何解决 GridViewItem c# (UWP) 的 SelectedIndex 中的延迟

How to resolve delay in SelectedIndex for GridViewItem c# (UWP)

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

例如,如果我有索引 0 selected 然后 select 索引 1 它显示索引 0 那么如果我再次 select 索引 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,并尝试引用 selected 对象而不是 selected 索引。原始的 If 语句只有索引 == 0 但留下了“selected”以表明我也尝试过这条路线。从左到右再返回我得到以下输出:

索引:-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 并且以相同的方式响应。我错过了什么?

当ItemClick事件被触发时,当前选中的item并没有改变,所以它的SelectedIndex的值仍然是之前选中的index,这是一个预期的行为。如果你想显示正确的 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;
    }
}