【问题标题】:Xamarin Forms Collection View Extra PaddingXamarin 表单集合视图额外填充
【发布时间】:2020-05-18 04:50:47
【问题描述】:

我正在试用 Xamarin 表单集合视图。它似乎在列表中的每个项目周围都有一些额外的填充。我不知道如何删除它。

这是我的观点的图片。该视图具有浅绿色背景。模板中的 2 列网格的标签设置为红色。

这里是 XAML/C#

<CollectionView 
    x:Name="BodyView"
    SelectionMode="Single"
    HorizontalOptions="FillAndExpand"
    BackgroundColor="Aqua"
    Grid.Row="2" />

BodyView.ItemTemplate = new DataTemplate(() =>
{
    var converter = (IValueConverter) Application.Current.Resources["GridCellConverter"];

    Grid grid = new Grid( );
    grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });

    foreach (var col in _gridColumns)
    {
        grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

        var content = new Label();
        content.Style = (Style)Application.Current.Resources["GridCellLabel"];
        content.BackgroundColor = Color.Red;
        Binding binding = new Binding("CellData", BindingMode.OneWay, converter, col.PageFieldId);
        content.SetBinding(Label.TextProperty, binding);
        grid.Children.Add(content, grid.ColumnDefinitions.Count - 1, 0);
    }

    return grid;
});

我将所有能找到的东西都归零。

我尝试在网格上设置负边距,但它不会向左移动。

有什么办法可以去掉内边距?

【问题讨论】:

  • 您是如何为 GridCellLabel 设置 Style 的?你为它设置了 Margin 吗?您可以在“BodyView.ItemTemplate”中为网格的 BackgroundColor 属性指定一个值,以检查网格是否填充了 collectionView 的宽度。
  • GridCellLabel 样式只是大小和文本颜色。我尝试设置网格背景颜色。我设置了所有的东西背景颜色!填充绝对来自集合视图。我很确定它是硬编码的,但希望有人可能有一个想法。
  • 你能分享一个基本的演示链接吗?这将有助于重现问题以获得解决方案。

标签: xamarin.forms


【解决方案1】:

您正在寻找的是网格的行和列间距!

    Grid grid = new Grid( ){ ColumnSpacing= "0", RowSpacing="0" };

另外,这需要删除:

    grid.Margin = new Thickness(-20, 0, 0, 0);

一个简单的问题,您是否在 UWP 中使用它?

另外,既然您使用的是 CollectionView,为什么不在 DataTemplate 中使用一个进入 GridItemsLayout 的项目?

更多信息在这里:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/collectionview/layout#vertical-grid

【讨论】:

  • 我很确定它不是网格列或行间距,因为它是我要删除的行的左侧和右侧的空间,但我还是尝试了它并没有改变任何东西.负边距试图将网格向左移动,但这不起作用。我将从示例中删除它以消除混淆。
  • 您尝试过 GridsItemLayout 吗?
  • 哦,是的,你的布局中是否有 Frame,因为 Frame 也有默认的 20 填充检查
  • 整个东西周围有一个框架,但我将 Padding 设置为 5。我很确定 Padding 来自 CollectionView。我没有使用网格布局,因为它是为了在一行上显示多个项目,而我想要在每一行上显示一个项目。我的内部布局很好 - 我只需要减少填充