我有一个显示聊天消息的集合 View ,它有 10 个可能的数据模板。每个数据模板都包含一个 flexlayout(因为我需要在左侧或右侧水平对齐它,就像聊天气泡一样),在这些 flexlayouts 中,我们有一个单独的网格,可以显示图像、标签、 map 或媒体播放器。它加载非常快,但滚动时非常慢。我试图取消 flexlayout,但网格不遵守我需要的 LayoutOptions End/Start,然后我用填充屏幕(水平)的 ContentView 交换了 FlexLayout,我能够水平对齐它的 child 。我注意到此更改没有性能改进,甚至可能变得更糟。此外,我已阅读并按照 Optimizing App Performance 的建议进行了更改。但似乎还不够。
下面我有我的collectionview标签和一个数据模板的例子,其他的非常相似,几乎没有区别。我的疑问是如何改进这种情况?
收藏查看
<CollectionView x:Name="ChatCollectionView" SelectionMode="None" HorizontalScrollBarVisibility="Never" VerticalScrollBarVisibility="Always" ItemsUpdatingScrollMode="KeepLastItemInView" ItemTemplate="{StaticResource MsgTemplateSelector}" Margin="5,0,5,0" />
数据模板之一
<DataTemplate x:Key="DefaultMsg">
<FlexLayout Direction="Row" MinimumWidthRequest="50" JustifyContent="{Binding MsgAlign}">
<Grid Padding="0" Margin="0,10,0,0">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="20"></RowDefinition>
</Grid.RowDefinitions>
<BoxView Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0" Grid.RowSpan="2" CornerRadius="5" BackgroundColor="{Binding MsgBg}" />
<Label Grid.Row="0" Grid.Column="0" Text="{Binding msg}" TextColor="Black" />
<Grid Grid.Row="1" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="20" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Grid.Row="0" TextColor="DarkGray" FontSize="12">
<Label.FormattedText>
<FormattedString>
<Span Text=" ">
<Span.FontFamily>
<OnPlatform x:TypeArguments="x:String" Android="Font-Awesome-Free-Solid.otf#FontAwesome5Free-Solid" iOS="FontAwesome5Free-Solid" />
</Span.FontFamily>
</Span>
<Span Text="{Binding date}" />
<Span Text=" at " />
<Span Text="{Binding hour}" />
</FormattedString>
</Label.FormattedText>
</Label>
<ActivityIndicator Grid.Column="1" Grid.Row="0" Color="#ff9000" HeightRequest="15" WidthRequest="15" IsRunning="{Binding sending}" IsVisible="{Binding sending}" HorizontalOptions="End" />
<Label Grid.Column="1" Grid.Row="0" Text="{Binding icon}" IsVisible="{Binding sent}" TextColor="{Binding IconColor}" FontSize="15" HorizontalOptions="End">
<Label.FontFamily>
<OnPlatform x:TypeArguments="x:String" Android="Font-Awesome-Free-Solid.otf#FontAwesome5Free-Solid" iOS="FontAwesome5Free-Solid" />
</Label.FontFamily>
</Label>
</Grid>
</Grid>
</FlexLayout>
</DataTemplate>
最佳答案
在我的情况下,问题出在跨度上,我删除并放置了一个普通标签。我的卷轴又开始流动了。
关于c# - Xamarin CollectionView 缓慢滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62097907/