Xamarin形成边缘

时间:2014-06-04 09:50:36

标签: xamarin xamarin.forms

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

更新 为了更好地理解什么是保证金(来自MSDN for WPF): enter image description here

6 个答案:

答案 0 :(得分:21)

最后! Xamarin Forms 2.2.0包括Margins支持!

Here are the docs视觉效果很好。 enter image description here

UPD @AUSTX_RJL特别优惠 与任何其他XAML框架一样,保证金值为Thickness,

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

  • 1表示Left
  • 2 for Top
  • 3表示Right
  • 4 for Bottom

Thickness

的字段

"1 2"设置:

  • 1表示LeftRight字段
  • 2表示TopBottom字段

"1"Thickness

的所有字段设置1

答案 1 :(得分:15)

截至2014-06-05,Xamarin.Forms没有保证金。在ContentViewFrame或任何其他布局中包含您的内容,并使用Padding属性。

答案 2 :(得分:11)

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

使用“间距”属性,您可以在布局中的所有子视图之间添加空格。

使用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渲染器:

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

答案 3 :(得分:5)

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

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

答案 4 :(得分:2)

这是Xamarin.Forms.View的扩展,用于向任何项目添加填充:

NSMutableArray

通过引用此静态类,您现在可以在构造函数中为页面创建内容,为方便起见使用WithPadding:

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

答案 5 :(得分:1)

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

正如@ ad1dima所述,Xamarin表格2.2(于4月27日发布)引入了保证金。您可以在https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/margin-and-padding/

找到有关保证金属性的文档