如何解决 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;
}
}
先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;
}
}