【问题标题】:Fill Screen with Grid of Fixed Size Cells用固定大小的单元格填充屏幕
【发布时间】:2021-12-17 21:44:17
【问题描述】:

我正在尝试为我的 Xamarin.Forms 应用程序实现启动器屏幕。因此,它包含几个Grids 图标按钮,每个网格都位于CarouselView 窗格中。图标按钮单元格将具有固定大小。

通常,我会使用已知的行数和列数来调整网格的大小,并相应地计算单元格大小。在这里,我需要采取相反的方向,从已知的单元格大小到计算的行数和列数。我看的越多,我似乎就越需要Create a Custom Layout in Xamarin.Forms,在那里我看到使用VisualElement.Measure 来确定子元素的父元素大小。

不过,在我取消该选项之前,有谁知道我是否/如何获得Grid 在渲染之前可以包含的固定大小单元的数量?

【问题讨论】:

  • 这个网格有多大?页面上的多个 CarouselView 听起来像性能猪。无论如何,使用屏幕尺寸来计算适合页面的单元格数量似乎非常简单。
  • 一个CarouselView,多个Grids。两者都占据了整个屏幕。看起来很简单,但我不擅长 UI 设计。

标签: xamarin.forms layout cell launcher measure


【解决方案1】:

经过一番折腾,我想我已经确定了一个可行的设计。最终实际上使用了CollectionView 而不是Grid

<CarouselView
    ItemsSource="{Binding LauncherPanes}"
    Loop="False">
    <CarouselView.ItemTemplate>
        <DataTemplate x:DataType="models:LauncherPaneViewModel">
            <CollectionView
                ItemsSource="{Binding Items}"
                ItemSizingStrategy="MeasureFirstItem">
                <CollectionView.ItemsLayout>
                    <GridItemsLayout
                        Orientation="Vertical"
                        Span="4" />
                </CollectionView.ItemsLayout>
                <CollectionView.ItemTemplate>
                    <DataTemplate x:DataType="models:LauncherIconViewModel">
                        <controls:LauncherIconView />
                    </DataTemplate>
                </CollectionView.ItemTemplate>
            </CollectionView>
        </DataTemplate>
    </CarouselView.ItemTemplate>
</CarouselView>

这仍然要求我不要在轮播的每个窗格中填充超过窗格可以容纳的图标,尽管从技术上讲,即使我这样做了 CollectionView 只会在窗格内垂直滚动。

【讨论】:

  • 我认为这是一个比填充网格更简单的解决方案。 Screen Dimensions 可能有助于计算项目数量。
猜你喜欢
  • 1970-01-01
  • 2016-01-15
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 2016-10-07
相关资源
最近更新 更多