簡體   English   中英

如何解決 GridViewItem c# (UWP) 的 SelectedIndex 延遲

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

第一次發文。 - 我有一個 gridview 向用戶提供 4 個選項。 選擇項目 0 會顯示與該選項相關的隱藏子菜單,而其他項目具有不同的功能。 為了選擇正確的索引,我必須進行兩次選擇。 SelectedIndex 從 -1 開始,根據文檔,這是預期的行為並且非常有意義。 如果我使用索引為 0 初始化視圖,則該項目的邊框突出顯示,就像它被選中一樣,只需單擊一下即可激活菜單,但如果我單擊任何其他項目,則需要單擊兩次才能注冊這些項目。

例如,如果我選擇了索引 0,則 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,並嘗試引用選定的 object 而不是選定的索引。 原始的 If 語句只有索引 == 0,但留下了“選定”以顯示我也嘗試過這條路線。 從左到右再返回,我得到以下 output:

指數:-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的值仍然是之前選中的索引,這是一個預期的行為。 如果要顯示正確的 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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM