30

我试图在 Xamarin.Forms文档中找到一些边距模拟。有人知道我们所拥有的东西或填充物是什么吗?

更新: 为了更好地理解保证金是什么(来自 MSDN for WPF): 在此处输入图像描述

4

6 回答 6

35

终于!Xamarin Forms 2.2.0包括边距支持!

这是具有出色视觉效果 的文档。在此处输入图像描述

@AUSTX_RJL 保证金值的UPD特殊值是Thickness就像在任何其他 XAML 框架中一样。

您可以Thickness在 XAML 中通过设置一个、两个或四个以逗号或空格分隔的值来进行 设置:与设置"1 2 3 4"相同:"1, 2, 3, 4"

  • 1 为Left
  • 2 为Top
  • 3 为Right
  • 4 为Bottom

领域Thickness

"1 2"套:

  • 1LeftRight字段
  • 2TopBottom字段

"1"为所有字段设置 1Thickness

于 2016-04-05T11:35:07.177 回答
15

截至 2014 年 6 月 5 日,Xamarin.Forms. 将您的内容包装在或任何其他布局中,并使用该ContentView属性。FramePadding

于 2014-06-05T13:29:01.390 回答
12
 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 渲染器

安卓渲染器:

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);
    }
  }
}
于 2015-01-20T14:51:24.777 回答
5

布局支持Padding属性,该属性适用于布局中包含的子项。我认为这是最接近他们目前支持的保证金概念

  var stackLayout = new StackLayout {
    Padding = new Thickness (10, 10, 10, 20),
    Children = {
      new Label {Text = "Hello"},
      new Label {Text = "World"}
    }
  }
于 2014-06-04T14:15:58.907 回答
2

这是 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)
    }
};
于 2015-09-05T01:04:46.353 回答
1

边距 - 控制控件之间的空间。
填充 - 控制父控件与其子控件之间的间距。

正如@ad1dima 所说,Xamarin forms 2.2(4 月 27 日发布)引入了利润。您可以在https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/margin-and-padding/找到有关边距属性的文档

于 2016-05-03T16:39:39.760 回答