C# 如何在Windows UWP ScrollIntoView期间删除重新渲染

C# 如何在Windows UWP ScrollIntoView期间删除重新渲染,c#,windows,xaml,scroll,uwp,C#,Windows,Xaml,Scroll,Uwp,当我在listview中使用ScrollIntoView时,页面会暂时变为空白,然后重新加载,我如何才能使其更加平滑 这是我目前的代码: <ListView Name="MessageList" Margin="0,82,0,45" SelectionMode="None" IsItemClickEnabled="True" ItemClick="FileMessage_Click"

当我在listview中使用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>

我没有完全重现你的问题。在我的电脑上,此问题仅在我第一次向
列表视图添加项目时出现<代码>列表视图
用作其默认面板,支持UI虚拟化。将默认面板更改为不支持UI虚拟化的StackPanel后,问题不会出现

您可以更改
ListView
ItemsPanel
,如下所示:

<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>

我没有完全重现你的问题。在我的电脑上,此问题仅在我第一次向
列表视图添加项目时出现<代码>列表视图
用作其默认面板,支持UI虚拟化。将默认面板更改为不支持UI虚拟化的StackPanel后,问题不会出现

您可以更改
ListView
ItemsPanel
,如下所示:

<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>


你是否在某些东西上使用虚拟化?我没有添加任何虚拟化,它在任何地方都是自动的吗?是的,它是自动的。我如何关闭它?附加属性
virtualizengstackpanel.isvirtualization=“False”
,或者至少这是一种方式,UWP不确定,还没有充分利用它。更糟糕的情况是覆盖ListView。ItemsPanel您是否在某些东西上使用虚拟化?我没有添加任何虚拟化,它在任何地方都是自动的吗?是的,它是自动的。如何关闭它?附加属性
virtualization StackPanel.IsVirtualization=“False”
或者至少这是一种方式,UWP不确定,还没玩够呢。更糟糕的情况是,只覆盖
列表视图。ItemsPanel
这不会自动将我滚动到底部,这就是问题所在。我还在为5个不同的数据模板使用数据模板选择器,这会影响它吗?您需要设置列表视图的高度并在
滚动到视图之前调用Update。请查看我的更新。这解决了大部分问题,但现在它会滚动显示最新消息之前的一条消息。为什么它不一直向下滚动?我想可能是设计的。如果有10000个或更多项目。一直向下滚动会让用户等待。这不会自动将我滚动到底部,这就是问题所在。我还在为5个不同的数据模板使用数据模板选择器,这会影响吗?您需要设置ListView的高度并在
ScrollingToView
之前调用Update。请查看我的更新。这解决了大部分问题,但现在它会滚动显示最新消息之前的一条消息。为什么它不一直向下滚动?我想可能是设计的。如果有10000个或更多项目。一直向下滚动会让用户等待。
 MessageList.UpdateLayout();
 MessageList.ScrollIntoView(MessageList.Items[MessageList.Items.Count - 1]);