我正在尝试滚动到ListView中的特定项目 ListView包含500个项目("问题")。我想将其导航到特定的问题编号。
xaml中的ListView
<ListView x:Name="LstQuestions" SelectionMode="None" Grid.Row="1" d:IsLocked="True">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
ListView项目是从代码加载的。
InitializeComponent();
for(int i=1;i<= 500; i++)
{
Button btn = new Button();
btn.Width = 120;
btn.Height = 120;
btn.Click += Btn_Click;
btn.Content = i;
LstQuestions.Items.Add(btn);
}
LstQuestions.UpdateLayout();
LstQuestions.ScrollIntoView((Button)LstQuestions.Items[_CurrentQuestionNumber]);
我正在尝试的是我有一个存储当前问题编号的设置,我希望它能自动将其滚动到ListView中的问题编号。
我尝试了ListView.ScrollIntoView和ListView.MakeVisible方法。没有任何效果。
我还发现了一件事。上面的代码在MainPage中工作正常。但是,如果我导航
Frame.Navigate(typeof(Questions))
那么上面的代码将无法在问题页面中使用。
我怎样才能实现它?
答案 0 :(得分:0)
我不知道问题是什么。但是我发现如果你从一个事件中调用ScrollIntoView它会起作用。
所以我创建了Layout_Updated事件。从该事件中调用ScrollIntoView。
<ListView x:Name="LstQuestions" SelectionMode="None" Grid.Row="1" LayoutUpdated="LstQuestions_LayoutUpdated" d:IsLocked="True">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
public Questions()
{
InitializeComponent();
for(int i=1;i<= 500; i++)
{
Button btn = new Button();
btn.Width = 120;
btn.Height = 120;
btn.Click += Btn_Click;
btn.Content = i;
LstQuestions.Items.Add(btn);
}
LstQuestions.UpdateLayout();
}
private void LstQuestions_LayoutUpdated(object sender, object e)
{
LstQuestions.ScrollIntoView(LstQuestions.Items[_CurrentQuestionNumber]);
}
现在可行。