C# 如何在Windows UWP ScrollIntoView期间删除重新渲染
当我在listview中使用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 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]);