【发布时间】:2012-08-24 11:23:14
【问题描述】:
我有一个 WinRT/C#/XAML 应用程序,其视图具有垂直的 ListView 项目。根据项目的数量,ListView 会显示一个垂直滚动条。这是 XAML 定义:
<UserControl.Resources>
<CollectionViewSource
x:Name="myViewSource"
Source="{Binding myViewModel.Items}" />
</UserControl.Resources>
...
<ListView
x:Name="myListView"
ItemsSource="{Binding Source={StaticResource myViewSource}}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
</ListView>
现在,每次我导航到此视图时,ListView 的选定项都是通过从后面的代码 (OnNavigatedTo) 设置视图模型中的数据绑定 SelectedItem 属性来选择的。我的问题: ListView 不会自动滚动到这个选定的项目。滚动条保持在 ListView 的顶部,用户必须手动滚动才能看到选定的项目。
在后面的代码(OnNavigatedTo)中设置 SelectedItem 后,我尝试执行 myListView.ScrollIntoView(MyViewModel.SelectedItem);,但它不起作用。滚动条保持在顶部。
我知道 SO:Scroll WinRT ListView to particular group 上的这个帖子。 这似乎是一个类似的问题。但是当我手动或使用 WinRT XAML 工具包遍历 ListView 的可视化树时,它找不到 ScrollViewer(而是返回 null)。
【问题讨论】:
-
在您尝试滚动之前,您是否正在等待 ListView 加载(被添加到可视化树中)?
-
我在 OnNavigatedTo() 中调用 ScrollIntoView()。我认为这将是正确的位置,并且应该已加载 ListView。还是我错了?
-
我认为 OnNavigatedTo 发生在控件加载之前...
标签: xaml windows-runtime winrt-xaml