Добавление места в макеты Xamarin.Forms?

Какой предлагается способ добавить пространство к макетам в Xamarin.Forms?

Один из способов - добавить фрейм без дочерних элементов следующим образом:

new Frame {
    BackgroundColor = Color.White,
    HeightRequest = 1,
    MinimumHeightRequest = 1,
    HasShadow = false
}

К сожалению, HeightRequest и MinimumHeightRequest игнорируются.

Есть ли лучший способ?


person SteAp    schedule 08.06.2014    source источник


Ответы (4)


Вы можете поместить свои элементы управления внутри макетов (например, фрейм, вид прокрутки, панель стека) и использовать свойство Padding:

        this.stackPanel = new StackLayout () 
        {
            Padding = new Thickness (8, 8)
        };  

        var scrollView = new ScrollView () 
        {
            Content = stackPanel,
            Padding = new Thickness (1, 2, 3, 4)
        };

        var frame = new Frame () 
        {
            Padding = new Thickness (8)
        };

Например, если вам нужно пространство между двумя кнопками, я считаю, что это поможет. Первый добавляет 10 к нижнему отступу, второй добавляет 10 к верхнему отступу, всего 20.

        var frame1 = new Frame () 
        {
            Padding = new Thickness (0,0,0,10),
            Content = new Button()
        };

        var frame2 = new Frame () 
        {
            Padding = new Thickness (0,10,0,0),
            Content = new Button()
        };
person SKall    schedule 08.06.2014

Большинство Xamarin.Forms макетов поддерживают добавление пробелов между элементами:

  • StackLayout имеет свойство Spacing,
  • Grid имеет свойства RowSpacing и ColumnSpacing,
  • ...

Теперь, если вы хотите добавить интервал в определенном месте, можно добавить BoxView:

myStackLayout.Children.Add (new BoxView {Color = Color.Transparent, HeightRequest = 5});

Вы также можете обернуть свой контент в Frame или ContentView, но он добавляет к содержимому отступ вместо добавления пробела (хотя эффект будет таким же).

person Stephane Delcroix    schedule 08.06.2014

То, что я делаю, отлично сработало для меня:

Предположим, вы хотите равномерно распределить 2 метки на горизонтальном StackLayout:

new StackLayout
{
    Orientation = StackOrientation.Horizontal,
    HorizontalOptions=LayoutOptions.CenterAndExpand,
    Spacing = 0, // <- Very important!!
    Children = {
        new Label { Text = "Label 1" },
        new BoxView { HorizontalOptions = LayoutOptions.FillAndExpand }, // <- the clever part
        new Label { Text = "Label 2" }
    }
};

Резюме

Путем вставки BoxViews, которые заполняют оставшееся пространство («FillAndExpand») между вашими представлениями, ваши представления кажутся распределенными равномерно. Установив Spacing = 0, вы не получите лишнего пространства между вашими представлениями.

person Lay González    schedule 04.02.2015

Пытаться:

myFrame.TranslateX=10;
myFrame.TranslateY=10;
person Vinit Saxena    schedule 03.12.2014