Подтвердить что ты не робот

Xamarin Forms Margins

Я пытаюсь найти аналог маржи в документации Xamarin.Forms . Кто-нибудь знает, есть ли что-то или прокладки - это все, что у нас есть?

UPD Для лучшего понимания того, какая маржа (из msdn для wpf): enter image description here

4b9b3361

Ответ 2

Начиная с 2014-06-05, в Xamarin.Forms нет полей. Оберните свой контент в ContentView, Frame или любом другом макете и используйте свойство Padding.

Ответ 3

 StackLayout components = new StackLayout
        {
            Orientation = StackOrientation.Vertical,
            Spacing=10,
            Padding = new Thickness (10, 10, 10, 20),
            Children = {
                new Label {Text = "Hello"},
                new Label {Text = "World"}
            }
        };  

Используя свойство Spacing, вы можете добавить пространство между всеми представлениями детей в макете.

Используя свойство Padding, вы можете добавить место в (левом, верхнем, правом и нижнем) положениях макета.

Если вы хотите, чтобы каждое представление дочернего элемента метки имело разный запас, вы можете сделать следующее. 1) Создайте и используйте пользовательские ярлыки:

using System;
using Xamarin.Forms;

namespace SharedViews
{

/// <summary>
/// Label propertis that will be rendered in native iOS and native Android Renderers.
/// </summary>
public class MyLabel : Label
{
    /// <summary>
    /// The x position of the label.
    /// </summary>
    public static readonly BindableProperty xProperty = BindableProperty.Create<MyLabel,int>(p => p.X,0);

    public int X{
        get{ return (int)base.GetValue(xProperty);}
        set {base.SetValue(xProperty,value);}
    }

    /// <summary>
    /// The y position of the label.
    /// </summary>
    public static readonly BindableProperty yProperty = BindableProperty.Create<MyLabel,int>(p => p.Y,0);

    public int Y{
        get{ return (int)base.GetValue(yProperty);}
        set {base.SetValue(yProperty,value);}
    }

   }
}

2) Создайте рендеринг iOS и android.

Android Renderer:

using System;
using Android.Widget;
using Android.Graphics;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer (typeof (MyLabel), typeof (MyLabelRenderer))]
namespace ChessGame.Android{
/// <summary>
/// Android label renderer:
/// here we set native Android label properties that can't be accessed in xamarin label.
/// </summary>
public class MyLabelRenderer : LabelRenderer
{
    protected override void OnElementChanged (ElementChangedEventArgs<Label> e) {
        base.OnElementChanged (e);
        MyLabel element = (MyLabel)this.Element;
        var nativeLabelView = (TextView)Control;
        nativeLabelView.SetX (element.X);
        nativeLabelView.SetY (element.Y);
    }
  }
}

Ответ 4

Макеты поддерживают свойство Padding, которое применяется к детям, содержащимся в макете. Я думаю, что это ближе всего к концепции Margin, которую они в настоящее время поддерживают

  var stackLayout = new StackLayout {
    Padding = new Thickness (10, 10, 10, 20),
    Children = {
      new Label {Text = "Hello"},
      new Label {Text = "World"}
    }
  }

Ответ 5

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

public static class XamarinFormsUtil
{
    public static View WithPadding(this View view, double all)
    {
        return WithPadding (view, all, all, all, all);
    }

    public static View WithPadding(this View view, double left, double top, double right, double bottom)
    {
        return new Frame () {
            Content = view,
            Padding = new Thickness(left, top, right, bottom)
        };
    }
}

С ссылкой на этот статический класс вы можете теперь создать контент для своей страницы внутри конструктора, используя WithPadding для удобства:

Content = new StackLayout () {
    Orientation = StackOrientation.Vertical,
    Children = {
        welcome.WithPadding(10),
        stars.WithPadding(10),
        starCount.WithPadding(10)
    }
};

Ответ 6

Поля - управление пространством между элементами управления.
Padding - контролирует расстояние между родительским элементом управления и его дочерними элементами управления.

Как указано в @ad1dima, Xamarin forms 2.2 (выпущен 27 апреля) вводил поля. Вы можете найти документацию по свойству margin на https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/margin-and-padding/