Xamarin form-UWP - 在快速滚动列表时显示数据之前的黑色单元格

Posted

技术标签:

【中文标题】Xamarin form-UWP - 在快速滚动列表时显示数据之前的黑色单元格【英文标题】:Xamarin form-UWP - black cell showing before data is visible on fast scrolling of list 【发布时间】:2017-11-05 21:27:48 【问题描述】:

当我快速滚动列表时,每个单元格在加载数据之前显示为黑色。如果我慢慢滚动,数据黑色单元格将不会出现。此行为仅发生在 Xamarin UWP 项目中。请找到下图以供参考。

【问题讨论】:

【参考方案1】:

通过编写自定义 ViewCell 和使用本机数据模板解决了该问题。现在快速滚动没有黑色单元格。我发布我的答案,以便有人会发现它有用。

例如:如果您有要显示的名称列表,请遵循:

首先添加自定义viewcell如下

        public class CustomViewCell : ViewCell
       
        public static readonly BindableProperty NameProperty =
            BindableProperty.Create("Name", typeof(string), typeof(CustomViewCell), "");

        public string Name
        
            get  return (string)GetValue(NameProperty); 
            set  SetValue(NameProperty, value); 
        

       

现在在 XAML 中添加 ListView,如下所示:

            <ListView 
            ItemsSource="Binding Products">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <custom:CustomViewCell  Name="Binding Name"/>
                </DataTemplate>
            </ListView.ItemTemplate>
            </ListView>

那你得在UWP项目的App.xaml中写下DateTemplate样式如下:

        <ResourceDictionary>
        <DataTemplate x:Key="CustomTemplate">
            <Grid Padding="10">
                <TextBlock  Foreground="#333333" FontSize="14" VerticalAlignment="Center" Text="Binding Name"/>
            </Grid>
        </DataTemplate>
        </ResourceDictionary>

最后编写一个 CustomRenderer 将原生 viewcell 替换为我们的 ListView。

    public class CustomViewCellRenderer : ViewCellRenderer
    
    public override Windows.UI.Xaml.DataTemplate GetTemplate(Cell cell)
    
        return App.Current.Resources["CustomTemplate"] as Windows.UI.Xaml.DataTemplate;
    
    

现在列表可以完美运行,没有任何黑色单元格渲染问题。

【讨论】:

嗨@Renjith,仍然在使用自定义视图单元的列表视图中闪烁黑屏。你能帮帮我吗?【参考方案2】:

这不是您的代码的问题。当您滚动得太快时,系统没有时间像您滚动那样快速渲染单元格,因此会出现黑色单元格。

【讨论】:

luccas-clezar 是的,没错。此问题仅在 UWP 中发生。有没有办法克服这个问题。 不幸的是,我不这么认为。我尝试了几种提高性能的方法(例如尝试删除绑定并更改 PropertyChanged 或 BindingContextChanged 中的单元格),但我没有注意到任何性能提升。 您好已通过自定义 ViewCell 解决了该问题。我已经写了customrenderer 来解决这个问题。现在快速滚动没有黑色单元格。我在下面添加了我的答案。

以上是关于Xamarin form-UWP - 在快速滚动列表时显示数据之前的黑色单元格的主要内容,如果未能解决你的问题,请参考以下文章

为啥滚动这个 xamarin 页面这么慢?

xamarin.iOS 垂直滚动图像

iOS - UITableView - 快速滚动时神秘地重复自己的行? (模拟器)

无法滚动在移动设备上使用 Xamarin.Forms 创建的 xaml 页面

如何在 Xamarin Android 中剪辑滚动视图的边界

如何在 IO (Xamarin.IO) 中动态启用和滚动 UIScrollView?