首页 文章

网格问题(Xamarin表单)

提问于
浏览
0

我使用以下代码给人的印象是纯色用方块掩盖:

public Page1()
{
    InitializeComponent();

    var maskSide = 196;

    var grid = new Grid {ColumnSpacing = 0, RowSpacing = 0};
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength((App.ScreenHeight - maskSide) / 2, GridUnitType.Absolute) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(maskSide, GridUnitType.Absolute) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength((App.ScreenWidth - maskSide) / 2, GridUnitType.Absolute) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(maskSide, GridUnitType.Absolute) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 0, 0);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 0, 1);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 0, 2);

    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 1, 0);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Transparent }, 1, 1);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 1, 2);

    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 2, 0);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 2, 1);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 2, 2);

    grid.HorizontalOptions = LayoutOptions.Fill;
    grid.VerticalOptions = LayoutOptions.Fill;

    Content = grid;
}

我在Droid的MainActivity的OnCreate中设置设备尺寸,如下所示:

App.ScreenWidth = (int)(Resources.DisplayMetrics.WidthPixels / Resources.DisplayMetrics.Density);
App.ScreenHeight = (int)(Resources.DisplayMetrics.HeightPixels / Resources.DisplayMetrics.Density);

结果如下:

enter image description here

但是有两个问题:

如您所见,有两个问题:

  • 由于某种原因,掩蔽方块并非恰好位于中间 .

  • 垂直和水平堆叠中的最后一个项目之间存在一个(或两个)像素间隙 .

我无法理解,问题是什么 . 有什么建议?

1 回答

  • 1

    Grid 可以为您解决这个问题

    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(maskSide, GridUnitType.Absolute) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(maskSide, GridUnitType.Absolute) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
    

相关问题