如何在Windows UWP ScrollIntoView中删除重新渲染

时间:2016-07-20 17:43:45

标签: c# windows xaml scroll uwp

当我使用ScrollIntoView作为我的列表视图时,该页面空白片刻然后重新呈现,我该如何让它更流畅?

这是我目前的代码:

<ListView Name="MessageList" Margin="0,82,0,45"
                  SelectionMode="None"
                  IsItemClickEnabled="True"
                  ItemClick="FileMessage_Click"
                  HorizontalAlignment="Stretch"
                  ItemTemplateSelector="{StaticResource MsgDataTemplateSelector}"
                  ItemsSource="{x:Bind messages}" >

         <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                    </Style>
         </ListView.ItemContainerStyle>

</ListView>

在代码隐藏中,每次将新消息添加到可以进入列表视图的可观察集合时,我都会这样做:

MessageList?.ScrollIntoView(MessageList.Items[MessageList.Items.Count -1]);

1 个答案:

答案 0 :(得分:0)

我没有完全复制你的问题。在我的电脑上,此问题仅在我第一次将项目添加到ListView时发生。 ListView使用ItemsStackPanel作为默认面板,支持UI虚拟化。将默认面板更改为不支持UI虚拟化的StackPanel后,问题不会出现。

您可以更改ItemsPanel的{​​{1}},如下所示:

ListView

更新:要滚动到最后一项,您需要设置ListView的高度并在<ListView Name="MessageList" Margin="0,82,0,45" SelectionMode="None" Height="300" IsItemClickEnabled="True" HorizontalAlignment="Stretch" ItemsSource="{x:Bind messages}" > <ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel></StackPanel> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> </Style> </ListView.ItemContainerStyle> </ListView> 之前调用ListView.UpdateLayout

ScrollIntoView