【发布时间】:2010-02-20 22:27:10
【问题描述】:
我有许多 ListViews 与 IsSynchronizedWithCurrentItem="True" 具有相同的数据源
我正在动态地将项目添加到此数据源。
问题在于当滚动出现时,添加的项目是不可见的,除非我移动滚动条。我是否应该为此目的使用另一个控件.. 或者如何将最后添加的项目(和滚动条)带入视图。
到目前为止,我都是直接在 XAML 中做所有事情,所以如果可能的话,我会很感激这样的解决方案。
【问题讨论】:
我有许多 ListViews 与 IsSynchronizedWithCurrentItem="True" 具有相同的数据源
我正在动态地将项目添加到此数据源。
问题在于当滚动出现时,添加的项目是不可见的,除非我移动滚动条。我是否应该为此目的使用另一个控件.. 或者如何将最后添加的项目(和滚动条)带入视图。
到目前为止,我都是直接在 XAML 中做所有事情,所以如果可能的话,我会很感激这样的解决方案。
【问题讨论】:
if ( !(myListView.Items.IsEmpty) )
{
myListView.ScrollIntoView(myListView.Items[myListView.Items.Count - 1]);
}
希望有帮助!
【讨论】:
我觉得你可能需要用到这个方法:
ListView.ScrollIntoView(ListView.SelectedItem);
【讨论】:
我有一个解决方案:
不是所有情况都适用,但是这一款就足够了!
诀窍是 禁用 ListView ScrollBars 并用 ScrollViewer 将其包围。
...
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" /> <!-- This is needed! -->
...
</Grid.RowDefinitions>
..
<ScrollViewer x:Name="MyScrollViewer" Grid.Row="0" >
<ListView Name="MyListView"
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True"
ScrollViewer.VerticalScrollBarVisibility="Disabled" />
</ScrollViewer>
...
</Grid>
然后在需要时调用
MyScrollViewer.ScrollToEnd();
【讨论】:
这听起来很可疑,但即使是真的,您也可以随时调用 ListView.BringIntoView() 方法,以...将所选项目显示在视图中:)。
【讨论】: