[英]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.