2016-08-18 3 views
0

Я использую следующий код, чтобы создалось впечатление, что сплошной цвет маскируется с квадратом:Проблемы с (форм Xamarin) Сетка

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; 
} 

Я устанавливаю размеры устройства в OnCreate MainActivity в дроида, как это:

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

Вот результат:

enter image description here

Однако есть два вопроса, которые:

Как вы можете видеть, есть два вопроса:

  1. По какой-то причине, маскировка квадрат не находится точно посередине.
  2. Существует один (или, возможно, два) промежутка пикселей между последними элементами как в вертикальном, так и в горизонтальном стеках.

Я не могу понять, в чем проблема. Какие-либо предложения?

+0

Если вы переключитесь в XAML и использовать некоторые дизайнеры, как гориллы игрок, то ваша жизнь будет намного проще – BraveHeart

+1

, как это отношение к проблеме? – nicks

+0

Это не так, но просто подсказка бесплатно :) – BraveHeart

ответ

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) }); 
+0

теперь вертикальная дистанционная линия исчезла, горизонтальная все еще там – nicks

+0

@NikaGamkrelidze это центрировано? Я не вижу никаких линий на моей стороне. Какую версию вы используете? – AllDayer

+0

Да, проблема центрирования исчезла. Я использую 'XF 2.0.0.6482'. Когда тестировалось на эмуляторе Xamarin Android Player (Lollipop 5.1), линий больше нет. Однако при тестировании на моем Nexus 5x (Marshmallow), очевидно, проблема связана с линией вертикального интервала. – nicks

Смежные вопросы