c# - 使用 Xamarin.Forms 创建一个每个单元格都是方形的 3X2 网格

标签 c# xaml xamarin.forms

我是 Xamarin.Forms 的新手。现在我需要在我的页面中设计一个网格,网格是 3X2(2 行,3 列)。但是我需要这个网格中的所有单元格都是方形的,并且这个网格的宽度与其父 View 相匹配。

换句话说,假设屏幕(或此网格的父 View )的宽度为 3,则每列的宽度为 1。如何强制每行的高度正好为 1(以便网格的每个单元格的高度等于宽度)?

这是我的设计但不是工作:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="*"/>
  </Grid.RowDefinitions>
</Grid>

是否有解决此问题的纯 XAML 解决方案?

感谢您的帮助。

最佳答案

Star 大小根据可用空间按方向自行调整,因此您需要通过重写 OnSizeAllocated 方法手动调整(调整子项大小时注意嵌套方法调用)。

Xaml:

<Grid x:Name="mainGrid">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="*"/>
  </Grid.RowDefinitions>
</Grid>

Xaml.cs

protected override void OnSizeAllocated(double width, double height)
{
    base.OnSizeAllocated(width, height);

    if (3 * height > 2 * height)
        mainGrid.HeightRequest = 2.0 / 3 * width;
    else
        mainGrid.WidthRequest = 3.0 / 2 * height;
}

关于c# - 使用 Xamarin.Forms 创建一个每个单元格都是方形的 3X2 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39032843/

相关文章:

c# - 找不到不同程序集中的 ASP.NET Core ViewComponents

wpf - WPF 超链接中的文本换行

c# - 以 xamarin 形式缩放 webview 的文本

c# - 具有多线程访问的SQLitePCLRaw.provider.e_sqlite3.dll中的System.AccessViolationException或System.ExecutionEngineException崩溃

c# - 在 Xamarin.Forms 中使用 Thread.Sleep

c# - 显示警报时获取警报内容

C# 调用以 char ** 指针作为参数的 C API

c# - TaskBarButton 鼠标中键事件

xaml - Windows 8 XAML 中的多列文本中的分栏符

c# - 将 .csv 文件读入 WPF 应用程序 (C#)