【问题标题】:UWP List View Overflow with large List带有大列表的 UWP 列表视图溢出
【发布时间】:2018-07-30 15:49:09
【问题描述】:

我正在尝试在 UWP 应用中使用 ListView 来显示一些表格数据。我能够很好地生成表格,但是,当将 ListView 绑定到大于大约 50,000 个项目左右的集合时,ListView 项目会溢出 listview 本身的边界,这可以通过将边框应用于 listview 来看到如附图所示。

有没有办法防止这种行为?
Listview Items Overflowing Container

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="5*"/>
            <RowDefinition Height="50*"/>
            <RowDefinition Height="5*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2.5*"/>
            <ColumnDefinition Width="15.8*"/>
            <ColumnDefinition Width="15.8*"/>
            <ColumnDefinition Width="15.8*"/>
            <ColumnDefinition Width="15.8*"/>
            <ColumnDefinition Width="15.8*"/>
            <ColumnDefinition Width="15.8*"/>
            <ColumnDefinition Width="2.5*"/>
        </Grid.ColumnDefinitions>
        <Grid Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="6">
            <ListView x:Name="CartGrid" SelectionMode="Extended" VerticalAlignment="Top" BorderBrush="DodgerBlue" BorderThickness="2">
                <ListView.HeaderTemplate>
                    <DataTemplate>
                        <Grid Padding="12" Background="{ThemeResource SystemControlBackgroundBaseLowBrush}">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="408"/>
                                <ColumnDefinition Width="360"/>
                                <ColumnDefinition Width="360"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="First Name" Style="{ThemeResource CaptionTextBlockStyle}"/>
                            <TextBlock Grid.Column="1" Text="Surname" Style="{ThemeResource CaptionTextBlockStyle}"/>
                            <TextBlock Grid.Column="2" Text="Category" Style="{ThemeResource CaptionTextBlockStyle}"/>
                        </Grid>
                    </DataTemplate>
                </ListView.HeaderTemplate>
                <ListView.ItemTemplate>
                    <DataTemplate x:Name="TableDataTemplate" x:DataType="local:Person">
                        <Grid Height="48" AutomationProperties.Name="{x:Bind Firstname}">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="48"/>
                                <ColumnDefinition Width="360"/>
                                <ColumnDefinition Width="360"/>
                                <ColumnDefinition Width="360"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="1" VerticalAlignment="Center" Style="{ThemeResource BaseTextBlockStyle}" Text="{x:Bind Firstname}" />
                            <TextBlock Grid.Column="2" VerticalAlignment="Center" Text="{x:Bind Lastname}"/>
                            <TextBlock Grid.Column="3" VerticalAlignment="Center" Text="{x:Bind Category}"/>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </Grid>
    </Grid>

【问题讨论】:

  • 请贴出 XAML 代码
  • 这种行为真的只发生在超过 50000 项的情况下?
  • 是的,如果我将其更改为 40,000 左右,则不会溢出

标签: uwp uwp-xaml


【解决方案1】:

这似乎是 UWP 中的一个错误,已报告但尚未修复(请参阅here)。

我认为有一个理论上可以解决这个问题的解决方案:使用Clip 剪辑ListView 的可见区域:

<ListView Width="300" Height="200">
   <ListView.Clip>
      <RectangleGeometry Width="300" Height="200" />
   </ListView.Clip>
</ListView>

但这会导致另一个问题 - 最后的项目永远无法显示,因为它们会溢出并被剪裁。您可以通过将“假”空项目添加到列表中来解决此问题,但这当然是非常不理想的解决方案。如果 API 自己修复会更好。

【讨论】:

  • 看起来在那个链接中,他们只是将提问者定向到 msdn 站点,因为问题与 VS 无关,这是大约一年前发布的。我在那个网站上找不到任何活跃的问题,而且我根本无法通过谷歌搜索找到任何结果,甚至无法找到遭受同样问题困扰的人。我想是因为 listview 不是为它在 winforms 中的返回而设计的(这是我试图松散地实现的)这个问题可能并不广为人知,所以我想我会在 MSDN 上发布并看看他们回来了.很高兴知道这不仅仅是我发疯了......
  • 您可以尝试 Telerik UWP Toolkit 中的DataGrid 控件,它可能更符合您的需求。但是,如果您在 MSDN 论坛上报告该错误,以便开发团队知道,那就太好了
  • 我最初使用 Telerik 的那个控件,因为它更适合,但是它遇到了同样的问题,我认为这个问题与那个控件无关。这就是为什么我开始寻找替代方法并发现它也出现在标准列表视图中的原因。 Telerik 控件似乎也没有我可以建立的“扩展”选择模式(Ctrl 和 Shift 单击选择),否则它会成为一个很好的选择,如果它也没有溢出容器。
  • 那太糟糕了...我认为应该升级。我可能会制作一个 Github repro 并尝试将其发布给 Microsoft 的一些人。一旦你写在 MSDN 上,你能给我一个链接吗?
  • 是的,确实发生了一些奇怪的事情,我无法在上面发布图片或链接,但这是我在 MSDN 上使用我的 XAML 提出的未解决问题,并且问题得到了解释。 social.msdn.microsoft.com/Forums/en-US/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多