Xamarin - CollectionView VerticalItemSpacing 不工作

Xamarin - CollectionView VerticalItemSpacing not working

我不知道哪里出了问题,我测试了几个代码变体,其中 none 个有效。我也尝试过使用 Frame 和 StackLayout 的变体。

<ScrollView VerticalOptions="StartAndExpand" Orientation="Vertical">
    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <CollectionView Grid.Row="0" x:Name="StockCards_CollectionView" ItemsSource="{Binding lc_ReleaseBill.Items}" SelectionChangedCommand="{Binding OnCollectionViewSelectionChanged}" EmptyView="List is empty." SelectionMode="Single"  SelectedItem="{Binding SelectedStockCard, Mode=TwoWay}">
            <CollectionView.ItemsLayout>
                <GridItemsLayout Orientation="Vertical"  VerticalItemSpacing="20"/>
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                            <Label Grid.Row="0" Grid.Column="0"  Text="{Binding Name}" FontAttributes="Bold" VerticalOptions="Start" TextColor="White"/>

                            <Label Grid.Row="1" Grid.Column="0"  Text="{Binding Unit}" FontAttributes="Italic"  VerticalOptions="Start" TextColor="White"/>

                            <Label Grid.Row="0" Grid.Column="1"  Text="{Binding Price_WithVAT_Unit}" FontAttributes="Bold"  HorizontalOptions="End" FontSize="19" TextColor="#00c8df"/>

                            <Label Grid.Row="1" Grid.Column="1"  Text="{Binding Amount}" FontAttributes="Bold"  HorizontalOptions="End" TextColor="White"/>
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </Grid>
</ScrollView> 

运行 在 Xamarin.Forms 4.5.0.356 上,同样的结果在 4.4.0.991640.

您可以尝试将边距添加到 ContentView 中的 DataTemplate 内容

<CollectionView Grid.Row="0" x:Name="StockCards_CollectionView" ItemsSource="{Binding lc_ReleaseBill.Items}" SelectionChangedCommand="{Binding OnCollectionViewSelectionChanged}" EmptyView="List is empty." SelectionMode="Single"  SelectedItem="{Binding SelectedStockCard, Mode=TwoWay}">
    <CollectionView.ItemsLayout>
        <GridItemsLayout Orientation="Vertical"/>
    </CollectionView.ItemsLayout>
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <ContentView>
                <Grid Margin="0,0,0,20">
                   ...
                </Grid>
            <(ContentView>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

此外,您应该尝试使用 ItemSpacing="20" 而不是 VerticalItemSpacing

编辑:由于 ItemSpacing 确实有效,但只有在其中包含更多项目足以前后滚动时,我才会尝试这种技术:

IsVisible 属性 设置为 false,在您的 Collection 有数据后,将其设置为 true:

<CollectionView IsVisible="{Binding CollectionHasData}" Grid.Row="0" x:Name="StockCards_CollectionView" ItemsSource="{Binding lc_ReleaseBill.Items}" SelectionChangedCommand="{Binding OnCollectionViewSelectionChanged}" EmptyView="List is empty." SelectionMode="Single"  SelectedItem="{Binding SelectedStockCard, Mode=TwoWay}">

private bool _collectionHasData;

public bool CollectionHasData
{
    get => _item;
    set { _collectionHasData = value; }
}

...

lc_ReleaseBill.Items = Data;
CollectionHasData = true;

我不知道你是如何获取数据的,如果你设置它或者对象已经有数据,但关键是,当你的项目有一些值时,将 bool 设置为 true

我通过在代码中设置 Collection View Item Spacing 来修复它,这并不理想,但比在 Collection View 内部的 Grid 上设置边距要好。

CollectionView.ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical)
    {
       ItemSpacing = 20
    };

对于添加的新项目,边距和间距不会更新,更新它们的唯一方法是滚动关闭然后返回屏幕。